dpfps86064 2010-05-28 15:49
浏览 33
已采纳

在php中使用__call方法时,'方法名称必须是字符串'

I am using the magic __call method in PHP. Sometimes the function I call is a number. For example the class name is example, then sometimes I want to call example::32

Is this possible or should I look at another alternative.

  • 写回答

2条回答 默认 最新

  • dongliao3742 2010-05-28 15:55
    关注

    Sure it's possible. You just need to change the call syntax. $foo->32() is not valid and will give a fatal error. But $foo->{'32'}() is valid syntax. Now, you can't define a function 32, but you can use __call to execute it...

    class Foo {
        public function __call($f, $args) {
            echo $f;
        }
    }
    
    $foo = new Foo;
    
    $foo->32();  //Fatal Error
    
    $foo->{32}(); //Fatal Error
    
    $foo->{'32'}(); // "32" is printed
    
    $x = 32;
    $foo->$x(); //Fatal Error
    
    $x = '32';
    $foo->$x(); // "32" is printed
    
    $x = 32;
    $foo->{(string)$x}(); // "32" is printed
    
    call_user_func(array($foo, '32')); // "32" is printed
    

    Or in 5.3 with static methods, it gets a bit harder:

    class Foo {
        public static function __callStatic($f, $args) {
            echo $f;
        }
    }
    
    Foo::32();  //Fatal Error
    Foo::{32}(); //Fatal Error
    Foo::{'32'}(); //Fatal Error
    
    $x = 32;
    Foo::$x(); //Fatal Error
    
    $x = '32';
    Foo::$x(); // "32" is printed
    
    $x = 32;
    Foo::{(string)$x}(); //Fatal Error
    
    call_user_func(array('foo', '32')); //Fatal Error
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据