这个问题在这里已经有了答案:Newselfvs.newstatic(3个答案)关闭6年前。我有一个类作为基类。然后我有几个继承自它的其他类。我想使用静态语法开始加载继承的类,但这种行为没有多大意义。直到现在,我都是这样加载类的,它完成了工作。$obj=newfoo();$something=$obj->ByID(1);我希望能够像这样调用ByID函数。$something=foo::Get()->ByID(1);上面的代码是有效的,但它不是调用继承类,而是加载基类。我想我明白为什么会这样,但这没有任何意义。在.NET中,“this”将始终应用于继承的对象,但在我这里它不是这样工作的。我
为什么我会收到此错误:Fatalerror:DeclarationofConcreteFooMapper::load()mustbecompatiblewiththatofAbstractFooMapper::load()online18来自这段代码:我最初的想法是这是一个错误;PHP在评估方法声明时未检测到ConcreteFoo实现了Foo。我认为这是因为当您运行这段代码时:它打印w00t!表明ConcreteFoo是Foo的一个实例。对这种行为是否正确有任何见解吗? 最佳答案 根据docs,类型提示必须完全匹配。
在php中,traits具有一些特性,如接口(interface)和抽象类,traits也有助于继承。任何与Trait、Interface、Abstractclass和Interface相关的真实世界示例或讨论。 最佳答案 假设有2个类:Mailer和Writer。Mailer通过邮件发送一些文本,其中Writer将文本写入文件。现在假设您想要格式化两个类使用的输入文本。这两个类将使用相同的逻辑。您可以创建一个接口(interface),但您需要在两个类中复制逻辑。您可以创建一个父类并扩展它,但PHP不允许继承多个类。如果您的Mai
我很久以前就读到过这个,但现在从未尝试过,我不记得这是否可能。是否可以在php5上扩展两个parent的类(class),例如class_d扩展了class_c和class_b此外,如果class_c和class_b本身是从class_a扩展的,你能做到这一点吗......所以你会得到这样的东西class_aclass_bclass_cclass_d 最佳答案 PHP不支持多重继承(您正在寻找的)。您可能想查看composition(其中一个类包含父类的实例)甚至interfaces如果它特别适用于您的情况。
假设我有一个父类classparent{}.....这个父类有3个子类classchild1{}classchild2{}classchild3{}这些子类还有更小的部分,比如classchild1subpar1{}classchild1subpar2{publicfunctionfoo(){echo"hi";}}classchild2subpar1{}classchild2subpar2{}现在,如何总结这一切classchild1extendschild1subpar1,child1subpar2{}classchild2extendschild2subpar1,childsubp
这会很奇怪。我有一个MySQL数据库类和独立类。例如:classusersextendsMySQL这个类是给用户的一个通用类,这样可以使用的次数更多。但偶尔会出现“MySQL_DEBUGGED”类,如果是这样,我想从中扩展:classusersextendsMySQL_DEBUGGED如果存在,我想继承MySQL_DEBUGGED,否则继承MySQL类。如果我将它放入变量中,它会抛出一个错误。怎么做? 最佳答案 我不认为你可以继承一个名字没有写在PHP脚本中的类。一个可能的解决方案是:在两个单独的文件中定义两个类,都称为MySQL让
OBS:我直接在这里编码,因为我的代码要复杂得多。如果我编码:classSuperFoo{publicfunction__get($name){return$this->$name;}publicfunction__set($name,$value){$this->$name=$value;}}classFooextendsSuperFoo{private$bar='';}$foo=newFoo();$foo->bar="Whyitdoesn'twork?";var_dump($foo);结果:object(Foo){["bar":"Foo":private]=>string(0)''
我正在寻找__FILE__的get_called_class()等价物……也许像get_included_file()?我有一组类想知道它们存在于哪个目录中。像这样:baseDir=dirname(__FILE__);}publicfunctiongetBaseDir(){return$this->baseDir;}}?>在其他文件中,在其他文件夹中...getBaseDir();$b=newB;echo$b->getBaseDir();$c=newC;echo$c->getBaseDir();//Annnd...allthreereturnthesamebasedirectory.?
虽然这个问题有点与语言无关(就支持Traits的OOP语言而言)我一直在修补PHP5.4a的夜间构建,并遇到了一个奇怪的场景。我似乎无法再运行我的安装,但那是另一回事了。给定以下代码段:traitMyTrait{publicfunctionmyMethod(self$object){var_dump($object);}}classMyClass{useMyTrait;}$myObject=newMyClass();$myObject->myMethod('foobar');//应该发生什么?我希望出现错误,指示$object需要是MyClass的实例。当trait方法被复制到一个us
我可能在这里遗漏了一些明显的东西,因为这是其他OOP语言中的基本功能,但我正在努力使用PHP方法来执行此操作。我知道PHP不是“真正的”OOP语言,但仍然...我要做的是将实例化为派生类的对象转换为基类。类似的东西:classSome{}classSomeMockextendsSome{}functionGetSomeMock(){$mock=newSomeMock();return(Some)$mock;//Syntaxerrorhere}我发现了一些关于将基类的对象向下转换为派生的奇怪请求的问题,这可以通过一些讨厌的调整来实现,但这个基本功能并不一定那么困难。我在这里缺少什么?编辑