rt请各位帮帮手:class Func {
//private $name = 'called';
public function __call($func, $name) {
$this->$func = function() {
echo $name;
};
}
}
$name = 'called';
$a = new Func();
echo gettype($a), '<br />';
echo get_class($a->call), '<br />';
$a->call($name);
输出竟然:
objectNotice: Undefined property: Func::$call in D:\xampp\htdocs\Project\newfile7.php on line 377Warning: get_class() called without object from outside a class in D:\xampp\htdocs\Project\newfile7.php on line 377
错误classfunctionobjectphp

解决方案 »

  1.   


    //没有那么方便的函数吧?只能一个一个类分别尝试
    class foo{
    public function __construct($name,$sex){
    $this->name=$name;
    $this->sex=$sex;
    }
    public function get_name(){
    return $this->name;
    }
    public function get_sex(){
    return $this->sex;
    }
    }
    $a=get_class_methods('foo');
    if(in_array("get_name",$a)){
    echo "该方法所属的类为foo";
    }else{
    echo "该方法不在类foo中,请更换其他类尝试";
    }
      

  2.   

    class Func {
    //private $name = 'called';
    public function __call($func, $namesArr) {
    $this->$func = function() {
    echo $namesArr[0];
    };
    //echo $namesArr[0];
    }
    /*public function __invoke() {
    echo 'called';
    }*/
    }
    $name = 'called';
    $a = new Func();
    echo gettype($a), '<br />';
    echo get_class($a->call), '<br />';
    $a->call($name);
    $a->call($name);这段如何实现执行匿名函数里的输出语句?echo gettype($a), '<br />';
    echo get_class($a->call), '<br />';这两行为什么输出一个是object,另一个错误:Notice: Undefined property: Func::$call in D:\xampp\htdocs\Project\newfile7.php on line 381Warning: get_class() called without object from outside a class in D:\xampp\htdocs\Project\newfile7.php on line 381
      

  3.   

    这样吗?<?php
    class Func{ public function __call($func, $namesArr){
        $this->$func = function($namesArr){
         echo $namesArr[0];
        };
        call_user_func($this->$func,$namesArr);
    }}$name='called';
    $obj = new Func();
    echo gettype($obj).'<br>';
    echo get_class($obj).'<br>';
    $obj->call($name);
    ?>
      

  4.   


    为什么call_user_func($this->$func,$namesArr);的$namesArr必须按照public function __call($func, $namesArr)中的$namesArr而命名?不能擅自命名其他变量名
      

  5.   

    因為__call的參數就是$namesArr這個值。
      

  6.   


    不可以像$obj->call($name);与public function __call($func, $namesArr)那样$name与$namesArr不同也可以赋值吗?
      

  7.   


    还有$this->$func是指public function __call($func, $namesArr)中的$func吗?还是另外新加一个变量?
      

  8.   

    $this->$func 不同 $func。
    $func是传入来的参数
    $this->$func 是 类的变量例如
    public function __call($func, $namesArr) {
         $this->$func = function() {
            echo $namesArr[0];
         };
    }
    $func 传入来是aa,这个aa是字符串,那么 $this->$func 就等于 $this->aa, $this->aa是一个变量.
    不同的.