gpt4 book ai didi

PHP: 'method doesnt exist' ,但确实如此

转载 作者:可可西里 更新时间:2023-11-01 01:06:25 25 4
gpt4 key购买 nike

我有这个奇怪的错误,

当我调用 $element_attrs = $element -> attributes(); 时,我收到一条通知,指出属性方法不存在:

Call to undefined method stdClass::attributes();

现在当我调用 die( get_class( $element ) ); 就在 attributes() 调用之前,php 返回 Select_Element 这是正确!

Form_Element 包含 attribute(); 方法。

我肯定 Select_Element 扩展了 Form_Element 并且两个文件都包含在内。

然而

如果我调用:

if ( method_exists($element, "attributes") ) {
$element_attrs = $element -> attributes();
}

它起作用了! method_exists 返回 true,attributes() 被调用!但是当我删除 if 命令时,我再次收到错误通知......

这到底是怎么回事!

代码

interface Element{
public function __construct( $element );
public function parse();
}

class Form_Element implements Element{

protected $element;

public function __construct($json_element){
$this -> element = $json_element;
}

public function parse(){
// Removed parsing code, unrelated
}

... removed unrelated methods ...

public function attributes( $key = null, $value = null ){
if ( is_null( $key ) ){
return $this -> element -> attributes;
}
else{
$this -> element -> attributes -> $key = $value;
}
}
}

class Select_Element extends Form_Element implements Element{

public function __construct( $element ) {
parent::__construct( $element );
}

public function parse(){
// Removed parsing code, unrelated
}
}

这是在 Form 类中调用代码的地方:

//注意:$this -> elementsForm_Element 对象的数组

public function edit_form($name_of_element, $name_of_value, $value){
foreach ( $this -> elements as $element ){
if ( method_exists($element, "attributes") ) {
$element_attrs = $element -> attributes();
}
if ( $element_attrs -> name == $name_of_element ){
switch ( $name_of_value ){
case "selected" :
$element -> selected( $value );
break;
case "options" :
$element -> options( $value );
break;
case "value" :
$element -> value( $value );
break;
// add more support as needed
}
}
}
}

有人知道为什么 PHP 认为 attributes(); 不存在吗?即使 method_exists($element, "attributes"); 返回 true

最佳答案

你说你在循环中。

很可能,您显示的代码被调用了两次,一次是 $element 是所需的对象,一次不是 - 当您使用 method_exists() 时,代码走过那个点,如果你不使用它,它就会崩溃。

当您使用 die() 时,循环终止于第一个元素。但这不一定是导致问题的元素。

错误信息

Call to undefined method stdClass::attributes();

支持这一点:注意 stdClass 它应该读作 Form_Element

所以你需要找出为什么 $element 并不总是你想要的对象。

关于PHP: 'method doesnt exist' ,但确实如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com