在PHP中,将$this参数用于父对象中的toString方法
对于测试,我想使用一个带有$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>';
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变量