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 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决