在PHP中,将$this参数用于父对象中的toString方法

在PHP中,将$this参数用于父对象中的toString方法,php,object,this,Php,Object,This,对于测试,我想使用一个带有$this参数的方法toString(),在我的所有对象中只调用一次。 为此,我有: class A { public function toString($object) { $result = '<pre>'; foreach ($object as $key => $value) { $result .= $key . ': ' . $value . '<br>';

对于测试,我想使用一个带有$this参数的方法toString(),在我的所有对象中只调用一次。 为此,我有:

class A {
    public function toString($object) {
         $result = '<pre>';
         foreach ($object as $key => $value) {
            $result .= $key . ': ' . $value . '<br>';
         }
         $result .= '</pre>';
         return $result;
     }
}

class B extends A {
    public function toString() {
        parent::toString($this);
    }
}
A类{
公共函数toString($object){
$result='';
class B extends A {
    public function toString($object = array()) {
        parent::toString($this);
    }
}
foreach($key=>$value的对象){ $result.=$key'.:'.$value'.
'; } $result.=''; 返回$result; } } B类扩展了A类{ 公共函数toString(){ 父::toString($this); } }
但这给了我一个:

严格标准:B::toString()的声明应与A::toString($object)兼容


但当我将B中的函数与$this参数一起使用时,$this是不允许的,而与other一起使用时,该参数将丢失。

您无法更改父级中声明的方法的定义:

Class A {
    public function toString($object = array()) {
        ...
    }
}
编辑:向父函数添加默认参数

class A {
    public function toString($object = null) {
        if ($object == null) {
            return '';
        }

        $result = '<pre>';
        foreach ($object as $key => $value) {
            $result .= $key . ': ' . $value . '<br>';
        }
        $result .= '</pre>';
        return $result;
    }
}

class B extends A {
    public function toString($object = null) {
        if ($object == null) {
            $object = $this;
        }
        parent::toString($object);
    }
}

我会像这样更改原始代码:

A类{
公共函数toString($object=null){
如果($object==null){
返回“”;
}
$result='';
class B extends A {
    public function toString($object = array()) {
        parent::toString($this);
    }
}
foreach($key=>$value的对象){ $result.=$key'.:'.$value'.
'; } $result.=''; 返回$result; } } B类扩展了A类{ 公共函数toString($object=null){ 如果($object==null){ $object=$this; } 父::toString($object); } }
如果这个行为真的只会被A类本身(及其子类)使用,那么我会说使用PHP的神奇方法
\uu toString()
,它本质上适用于任何类实例

A类{
public$foo='foo';//因此我们可以从输出中的
公共函数{
$result='';
class B extends A {
    public function toString($object = array()) {
        parent::toString($this);
    }
}
foreach($key=>$value){ $result.=“$key:$value
”; } $result.=''; 返回$result; } } B类扩展了A类{ public$bar='bar';//所以我们可以在输出中看到B中的内容 //真的,这里没有别的事可做 } $b=新的b(); 亿美元;
将对象传递给类A中的
toString()
的想法听起来是错误的。您应该在对象本身上有一个
toString()
方法,而不是像您尝试的那样(即传递对象本身)。如果您觉得有必要这样做,您最好的选择可能是将
a::toString($object)
更改为一个受保护的方法,称为
\u toString($object)之类的方法
然后将
B::toString(){parent::_-toString($this);}
作为一个整体放在一边-有许多内置方法可以实现类似于
toString
中的循环的功能(它们只会处理深层对象)。考虑一下其中的一些,你可能会发现一些有用的东西:JSONYNECONDER,VARXORM,序列化,我想还有其他的……更不用说已经有了一个<代码>“可捕获的致命错误:类的对象无法转换为字符串”我已经尝试过了,但我需要一个$Object变量