PHP抽象方法解析
我有一个抽象类,定义如下:PHP抽象方法解析,php,Php,我有一个抽象类,定义如下: abstract class Abstract Parent extends Zend_Db_Table_Abstract { abstract function funcA($post); abstract function funcB(); public function newEntry($post) { $t1 = $this->funcA($post); $t2 = $this->f
abstract class Abstract Parent extends Zend_Db_Table_Abstract {
abstract function funcA($post);
abstract function funcB();
public function newEntry($post) {
$t1 = $this->funcA($post);
$t2 = $this->funcB();
}
}
require_once 'atablemodel.php';
class Child extends AbstractParent {
public function funcB()
{
return 'Some Value';
}
public function funcA($post)
{
$data = array(
'v1' => htmlentities($post['v1'])
);
return $data;
}
}
子类定义了两个抽象方法,如下所示:
abstract class Abstract Parent extends Zend_Db_Table_Abstract {
abstract function funcA($post);
abstract function funcB();
public function newEntry($post) {
$t1 = $this->funcA($post);
$t2 = $this->funcB();
}
}
require_once 'atablemodel.php';
class Child extends AbstractParent {
public function funcB()
{
return 'Some Value';
}
public function funcA($post)
{
$data = array(
'v1' => htmlentities($post['v1'])
);
return $data;
}
}
但是,当我尝试此操作时,会出现一个错误:
Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /var/www/.../abstractparent.php on line 27
这是抽象父级调用其中一个抽象方法的行。我想要发生的是,此行应该调用已定义的子方法
现在,我假设有一种方法可以做到这一点,因为我是PHP的初学者,所以我在做一些根本错误的事情。有什么建议可以帮助我解决这个问题吗?如果我将这两个抽象方法定义为具有实现,然后在所有子级中重写这些方法(即,根本不处理抽象类),我如何确保调用其中一个方法的父级在执行时调用相应的子方法
编辑
根据关于合并静态和抽象问题的各种评论,我如上所述重新定义了类,并出现了一个新的错误,如上所示。要解决当前对象的方法,您需要
$this
:
$t1 = $this->funcA($post);
$t2 = $this->funcB();
单独调用funcA()
查找全局定义的函数,而不是方法
如果要从对象外部调用该方法,请使用
$objectname->methodname()
要寻址当前对象的方法,您需要
$this
:
$t1 = $this->funcA($post);
$t2 = $this->funcB();
单独调用funcA()
查找全局定义的函数,而不是方法
如果要从对象外部调用该方法,请使用
$objectname->methodname()
您将函数声明为静态函数,因此不能将它们与$this一起使用。静态方法可以通过self::或通过类名引用:
在非静态方法的类实例上使用$this。您将函数声明为静态函数,因此不能将它们与$this一起使用。静态方法可以通过self::或通过类名引用:
在非静态方法的类实例上使用$this。静态方法不能使用
$this
引用自身,因为静态函数可以在不实例化类的情况下使用,因此$this
不能保证存在
self
关键字可用于引用类树中的方法。您可能希望这样实现它:
public static function newEntry($post) {
$t1 = self::funcA($post);
$t2 = self::funcB();
}
但是,请注意,在类结构方面存在一些问题。对于这种范围解析,PHP5.3的工作方式可能不同于以前的版本,因此请务必仔细阅读。如果父/子结构不适合您,您也可以始终使用准确的类名引用静态方法,即
child::funcA
静态方法不能使用$this
引用自身,因为静态函数可以在不实例化类的情况下使用,因此,$this
不能保证存在
self
关键字可用于引用类树中的方法。您可能希望这样实现它:
public static function newEntry($post) {
$t1 = self::funcA($post);
$t2 = self::funcB();
}
但是,请注意,在类结构方面存在一些问题。对于这种范围解析,PHP5.3的工作方式可能不同于以前的版本,因此请务必仔细阅读。如果父/子结构不能正常工作,您也可以通过准确的类名引用静态方法,即
child::funcA
,但是我得到了错误:“致命错误:在/var/www/../abstractparent.php第27行的对象上下文中不使用$this”aaaaah,我忽略了static
。然后试试classname::methodname(),这是调用方法的静态方式。但是我不能从父级调用它,对吗?因为然后它将解析为父实现,这是抽象的……但是我得到了一个错误:“致命错误:在/var/www/../abstractparent.php第27行的对象上下文中不使用$this”aaaah,我忽略了静态
。然后试试classname::methodname(),这是调用方法的静态方式。但是我不能从父级调用它,对吗?因为它将解析为父实现,它是抽象的…一个方法既抽象又静态是没有意义的。除了它是-该方法在实现类的上下文中是静态的。该值始终相同,并且不取决于类的状态。除非从编译器的角度来看这是无效的。。。忘记了导致最新错误的$。我以前觉得自己很笨,现在更糟了!谢谢大家的帮助@埃利:“鉴于各种评论……”-请不要这样做。论坛的存在不仅仅是为了解决你的问题。人们所评论和回答的问题现在已经不复存在,他们的答案变得毫无意义。如果您有更多问题,请创建不同的问题-不要更改现有问题以删除您所询问的错误。方法既抽象又静态是没有意义的。除此之外-该方法在实现类的上下文中是静态的。该值始终相同,并且不取决于类的状态。除非从编译器的角度来看这是无效的。。。忘记了导致最新错误的$。我以前觉得自己很笨,现在更糟了!谢谢大家的帮助@埃利:“鉴于各种评论……”-请不要这样做。论坛的存在不仅仅是为了解决你的问题。人们所评论和回答的问题现在已经不复存在,他们的答案变得毫无意义。如果您有更多问题,请创建不同的问题-不要更改现有问题以删除您所询问的错误。我尝试使用self::并在abstractparent.php中使用该选项时出错,使用此->会导致上面显示的错误。我尝试使用self::并在abstractparent.php中使用此->时出错,使用此->会导致上面显示的错误。我暂时删除了所有静态引用,导致