如何调用php中不存在的类方法


How to call class methods that do not exist in php?

我只想创建一个函数,就像在magento中的getFieldname()一样。

例如:

在Magento

getId()-返回ID字段的值

getName()-返回Name字段的值

我怎样才能创建这样的函数?在这种情况下请帮帮我。。

我想做的只是像下面的代码,

Class Called{
    $list=array();
    function __construct() {
        
        $this->list["name"]="vivek";
        $this->list["id"]="1";
    }
    function get(){
        echo $this->list[$fieldname];
    }
}
$instance=new Called();
$instance->getId();
$instance->getName();

您可以使用魔术方法__call来解决您的情况

<?php
class Called
{
    private $list = array('Id' => 1, 'Name' => 'Vivek Aasaithambi');
    public function __call($name, $arguments) {
        $field = substr($name, 3);
        echo $this->list[$field];
    }
}
$obj = new Called();
$obj->getId();
echo "<br/>'n";
$obj->getName();
?>

有关__call的更多信息,请访问:

http://php.net/manual/en/language.oop5.overloading.php#object.call

检查Varien_Object的实现,我认为__call方法可能就是您想要的。http://freegento.com/doc/de/d24/_object_8php-source.html

这将基本上"捕获"任何不存在的方法调用,如果它们的形状为$this->getWhateverField,则将尝试访问该属性。稍微调整一下就可以了。

看看这是否是您想要的:

您的类应该从定义所需方法的另一个类(超级类)继承。

class Super {
    public function getId(){
        return $this->list["id"];
    }
    public function getName(){
        return $this->list["name"];
    }
}
class Called extends Super {
    var $list = array();
    function __construct() {
        $this->list["name"]="vivek";
        $this->list["id"]="1";
    }
}
$instance=new Called();
echo $instance->getId(); // 1
echo $instance->getName(); //vivek