我有这个奇怪的错误,PHP:“法犯规存在”,但它确实
当我打电话$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();
}
IT WORKS! method_exists返回true,调用attributes()
!但是当我删除if
命令时,我再次收到错误通知...
这到底是怎么回事!
CODE
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 -> elements
是Form_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为什么会这么想s attributes();
不存在?即使method_exists($element, "attributes");
返回true
?
你调用方法的对象是一个'stdClass'(这是反序列化json或将数组转换为对象时通常会得到的),所以它显然不是你的'Form_Element'类的一个实例。 – ThiefMaster 2012-03-23 10:48:22
@ThiefMaster,但他说'get_class($ element)'返回正确的类型。 – 2012-03-23 10:49:18
你确定你的'element'是'Form_Element'的一个实例吗? – scibuff 2012-03-23 10:49:24