草庐IT

php - 提交抽象类和子类的最佳实践?

我想知道在归档时,在PHP中创建抽象类和子类的最佳(和实际)实践是什么。我有抽象类游戏,我想知道是否应该将子类放入单独的文件中,require_once('games.class.php');用于单独的文件还是只在abstractclassgames文件中包含每个子类?谢谢! 最佳答案 人们通常倾向于每个类一个文件——将文件名映射到类名(这有助于autoloading)。关于这方面的一个很好的例子,您应该查看ZendFramework的来源:有大量的类,有接口(interface)、抽象类、多级子目录等等。这是他们的相关部分Codi

php - 如果子类不定义构造函数,是否可以直接使用父类(super class)的构造函数?

构造函数是继承的还是属于定义它们的类?我只见过调用父类(superclass)构造函数的子类构造函数的示例。这是我当前的代码,它可以给出一些关于正在发生的事情的提示。(我会根据你的回复修改代码,如果我可以使用父类(superclass)的构造函数,我就不会为每个子类定义一个构造函数,然后从每个子类调用父类(superclass)的构造函数。abstractclassview{public$vieverid;function__construct($viewerid){$this->viewer=$viewerid;}}classviewactorextendsview{function

php - 实现接口(interface)的类必须在子类之前声明?

今天我偶然发现了一个有趣的问题。在多个声明的单个文件的上下文中,如果类B实现了接口(interface)A,并且类C扩展了类A,类B必须在类C之前声明。以下代码无效:interfaceA{}classCextendsB{}//Class'B'notfoundclassBimplementsA{}这修复了它:interfaceA{}classBimplementsA{}classCextendsB{}//Class'B'isfound但这工作正常:classA{}classCextendsB{}//Class'B'isfoundclassBextendsA{}这些是我在PHP5.3.8(

PHP 父类(super class)在不知道它们的情况下调用子类方法?

在尝试调试某些PHP类时,我遇到了一些在我看来非常奇怪的行为。我构建了以下行为的演示:classBaseClass{publicfunctionbaseMethod(){echo(implode('',$this->childMethod()).PHP_EOL);}}classChildClassextendsBaseClass{protectedfunctionchildMethod(){returnarray('What','The','Actual','Fork!');}}$a=newChildClass();$a->baseMethod();现在,在我看来,基类根本不应该对子类

php - 查看父类的子类中是否存在静态属性(后期静态绑定(bind))?

父类中的代码:foreach(static::$_aReadOnlyDatabaseTablesAS$TableName=>$aColumns){//Dosomething}这在子类中定义了$_aReadOnlyDatabaseTables时有效,但在$_aReadOnlyDatabaseTables不存在时抛出错误。我需要先检查这个属性是否存在。我认为它应该是这样的:if(property_exists(static,$_aReadOnlyDatabaseTables)){foreach(static::$_aReadOnlyDatabaseTablesAS$TableName=>$

php - 将子类映射为其扩展父类

我创建了以下抽象类,它使用singletableinheritance并在DiscriminatorColumn上映射子类模型。/***@Entity*@Table(name="entity")*@InheritanceType("SINGLE_TABLE")*@DiscriminatorColumn(name="model",type="string")*@DiscriminatorMap({*"green"="model\GreenEntity",*"blue"="model\BlueEntity"*})*/abstractclassAbstractEntity{/**@Id@Co

php - 捕获和处理子类中抛出的异常的通用方法

假设我有一个父类:classParent{//...}和一个带有方法的子类:classChildextendsParent{publicfunctionfoo(){//processandreturndata}publicfunctionbar(){//processandreturndata}//waymoremethods...}那么在PHP中是否有一种通用的方法来处理子方法中抛出的任何异常?例如,Parent类中的处理程序?或者我是否需要将所有方法主体包装在一个单独的try-catchblock中?我想要实现的是,如果任何子方法抛出任何类型的异常,则返回一个空的array()。

php - 在 PHPStorm 中,当我有一个从每个子类返回不同类型的父类(super class)方法时,如何使类型提示工作

我有一个继承自父类(superclass)的类,其中父类(superclass)有一个静态find()方法来实例化子类的实例(事件记录模式)。classActiveRecordClass{/***@returnmixed*/publicstaticfunctionfind(){//Codereturnsinstanceofcalledclass}}classModelClassextendsActiveRecordClass{}//returnsinstanceofModelClass,butPHPStormdoesn'trealiseModelClass::find($model_i

php - Magento:如果父类别为空,则显示来自子类别的产品

我有以下几类汽车零件(0)轮胎(0)轮辋(5)现在在产品列表中,显然汽车零件和轮胎列表返回0个产品。但对于用户来说,这是一个尴尬的地方。如果类别为空,是否可以显示子项?亲切的问候 最佳答案 您是否在管理界面中将该类别标记为anchor类别?这应该允许子类别的产品显示在父类别列表中。希望对您有所帮助。谢谢,乔 关于php-Magento:如果父类别为空,则显示来自子类别的产品,我们在StackOverflow上找到一个类似的问题: https://stackov

php - 将对象转换为其子类之一(协变返回类型)的正确 OO 方法是什么?

我有一个子类需要返回其父类返回类型的子类。我相信这称为协变返回类型。我想知道从父类转换为子类的最简单方法。classA{}classBextendsA{functionbar(){}}classCar{functionfoo(){returnnewA();}}classBrokenCarextendsCar{functionfoo(){$a=parent::foo();//Whatisthecleanestwaytoconvert$atotypeB?}} 最佳答案 在PHP中,您不能使用语言中可用的功能将对象从类型/类A“转换”为B