我想知道在归档时,在PHP中创建抽象类和子类的最佳(和实际)实践是什么。我有抽象类游戏,我想知道是否应该将子类放入单独的文件中,require_once('games.class.php');用于单独的文件还是只在abstractclassgames文件中包含每个子类?谢谢! 最佳答案 人们通常倾向于每个类一个文件——将文件名映射到类名(这有助于autoloading)。关于这方面的一个很好的例子,您应该查看ZendFramework的来源:有大量的类,有接口(interface)、抽象类、多级子目录等等。这是他们的相关部分Codi
构造函数是继承的还是属于定义它们的类?我只见过调用父类(superclass)构造函数的子类构造函数的示例。这是我当前的代码,它可以给出一些关于正在发生的事情的提示。(我会根据你的回复修改代码,如果我可以使用父类(superclass)的构造函数,我就不会为每个子类定义一个构造函数,然后从每个子类调用父类(superclass)的构造函数。abstractclassview{public$vieverid;function__construct($viewerid){$this->viewer=$viewerid;}}classviewactorextendsview{function
今天我偶然发现了一个有趣的问题。在多个声明的单个文件的上下文中,如果类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类时,我遇到了一些在我看来非常奇怪的行为。我构建了以下行为的演示:classBaseClass{publicfunctionbaseMethod(){echo(implode('',$this->childMethod()).PHP_EOL);}}classChildClassextendsBaseClass{protectedfunctionchildMethod(){returnarray('What','The','Actual','Fork!');}}$a=newChildClass();$a->baseMethod();现在,在我看来,基类根本不应该对子类
父类中的代码:foreach(static::$_aReadOnlyDatabaseTablesAS$TableName=>$aColumns){//Dosomething}这在子类中定义了$_aReadOnlyDatabaseTables时有效,但在$_aReadOnlyDatabaseTables不存在时抛出错误。我需要先检查这个属性是否存在。我认为它应该是这样的:if(property_exists(static,$_aReadOnlyDatabaseTables)){foreach(static::$_aReadOnlyDatabaseTablesAS$TableName=>$
我创建了以下抽象类,它使用singletableinheritance并在DiscriminatorColumn上映射子类模型。/***@Entity*@Table(name="entity")*@InheritanceType("SINGLE_TABLE")*@DiscriminatorColumn(name="model",type="string")*@DiscriminatorMap({*"green"="model\GreenEntity",*"blue"="model\BlueEntity"*})*/abstractclassAbstractEntity{/**@Id@Co
假设我有一个父类:classParent{//...}和一个带有方法的子类:classChildextendsParent{publicfunctionfoo(){//processandreturndata}publicfunctionbar(){//processandreturndata}//waymoremethods...}那么在PHP中是否有一种通用的方法来处理子方法中抛出的任何异常?例如,Parent类中的处理程序?或者我是否需要将所有方法主体包装在一个单独的try-catchblock中?我想要实现的是,如果任何子方法抛出任何类型的异常,则返回一个空的array()。
我有一个继承自父类(superclass)的类,其中父类(superclass)有一个静态find()方法来实例化子类的实例(事件记录模式)。classActiveRecordClass{/***@returnmixed*/publicstaticfunctionfind(){//Codereturnsinstanceofcalledclass}}classModelClassextendsActiveRecordClass{}//returnsinstanceofModelClass,butPHPStormdoesn'trealiseModelClass::find($model_i
我有以下几类汽车零件(0)轮胎(0)轮辋(5)现在在产品列表中,显然汽车零件和轮胎列表返回0个产品。但对于用户来说,这是一个尴尬的地方。如果类别为空,是否可以显示子项?亲切的问候 最佳答案 您是否在管理界面中将该类别标记为anchor类别?这应该允许子类别的产品显示在父类别列表中。希望对您有所帮助。谢谢,乔 关于php-Magento:如果父类别为空,则显示来自子类别的产品,我们在StackOverflow上找到一个类似的问题: https://stackov
我有一个子类需要返回其父类返回类型的子类。我相信这称为协变返回类型。我想知道从父类转换为子类的最简单方法。classA{}classBextendsA{functionbar(){}}classCar{functionfoo(){returnnewA();}}classBrokenCarextendsCar{functionfoo(){$a=parent::foo();//Whatisthecleanestwaytoconvert$atotypeB?}} 最佳答案 在PHP中,您不能使用语言中可用的功能将对象从类型/类A“转换”为B