';方法名称必须是字符串';在php中使用_调用方法时
我正在使用PHP中的magic\uuuu调用方法。有时我调用的函数是一个数字。例如,类名是example,那么有时我想调用example::32';方法名称必须是字符串';在php中使用_调用方法时,php,Php,我正在使用PHP中的magic\uuuu调用方法。有时我调用的函数是一个数字。例如,类名是example,那么有时我想调用example::32 这是可能的,还是我应该考虑另一种选择。不,这是不可能的,因为32不是有效的属性名称。您将得到如下解析错误: 分析错误:语法错误,意外的T_LNUMBER,应为T_字符串或T_变量或“$” 此外,example::32将引用一个静态属性,而不是一个方法(example::32()如果32将是一个有效的名称,则会引用,但您需要使用来获取这些调用) 如果要访
这是可能的,还是我应该考虑另一种选择。不,这是不可能的,因为
32
不是有效的属性名称。您将得到如下解析错误:
分析错误:语法错误,意外的T_LNUMBER,应为T_字符串或T_变量或“$”
此外,example::32
将引用一个静态属性,而不是一个方法(example::32()
如果32
将是一个有效的名称,则会引用,但您需要使用来获取这些调用)
如果要访问不存在的属性,请改用。否,这是不可能的,因为
32
不是有效的属性名称。您将得到如下解析错误:
分析错误:语法错误,意外的T_LNUMBER,应为T_字符串或T_变量或“$”
此外,example::32
将引用一个静态属性,而不是一个方法(example::32()
如果32
将是一个有效的名称,则会引用,但您需要使用来获取这些调用)
如果要访问不存在的属性,请改用。确保这是可能的。您只需要更改调用语法<代码>$foo->32()无效,将出现致命错误。但是
$foo->{'32'}()
是有效的语法。现在,您不能定义函数32,但可以使用_调用来执行它
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
或者在5.3中使用静态方法时,会变得更难:
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
当然有可能。您只需要更改调用语法<代码>$foo->32()无效,将出现致命错误。但是
$foo->{'32'}()
是有效的语法。现在,您不能定义函数32,但可以使用_调用来执行它
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
或者在5.3中使用静态方法时,会变得更难:
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
我不认为
32
是一个函数的有效名称。我不认为32
是一个函数的合理名称。我不认为32
是一个函数的有效名称。我不认为32
是一个函数的合理名称。你知道这是否与函数方法结合使用吗。这不起作用:方法_存在('Foo','32')<代码>方法_exists()仅适用于已定义的函数。因此,任何导致执行\u call()
的调用都将返回false…您知道如何检查函数是否将通过吗。因为我必须检查函数是否通过其他方法,不是所有方法都是神奇的。你不需要检查。。。在\u call()
中,检查它是否可以处理该方法。否则,抛出新的BadMethodCallException(“此函数不存在”)代码>。然后,尝试{}catch(){}异常。这样,你尝试处理它,如果失败了,你知道这个方法不存在。。。或者添加一个返回bool的方法isCallable($name){}
。主体类似于数组($this->methods)中的returnmethod_exists($this,$name)|
其中$this->methods
包含了调用()可以处理的所有方法……您知道这是否与函数method\u一起工作吗。这不起作用:方法_存在('Foo','32')<代码>方法_exists()
仅适用于已定义的函数。因此,任何导致执行\u call()
的调用都将返回false…您知道如何检查函数是否将通过吗。因为我必须检查函数是否通过其他方法,不是所有方法都是神奇的。你不需要检查。。。在\u call()
中,检查它是否可以处理该方法。否则,抛出新的BadMethodCallException(“此函数不存在”)代码>。然后,尝试{}catch(){}异常。这样,你尝试处理它,如果失败了,你知道这个方法不存在。。。或者添加一个返回bool的方法isCallable($name){}
。主体类似于数组($this->methods)中的returnmethod_exists($this,$name)|
其中$this->methods
包含了_call()可以处理的所有方法…@Saif Bechan:但是为什么要调用这样的方法呢?目的是什么?例如,我有一个“问题”类和一个“列表”方法。这列出了所有的问题。问题->列表()。现在我想创建一个神奇的函数调用。如果我调用questions->32(),我想显示id为32的问题。@Saif Bechan:好吧,综合的方法是命名方法get
或getById
,如果有更多的方法来获取一个问题/几个问题。@Saif Bechan:但是为什么要调用这样的方法呢?目的是什么?例如,我有一个“问题”类和一个“列表”方法。这列出了所有的问题。问题->列表()。现在我想创建一个神奇的函数调用。如果我调用questions->32(),我想显示id为32的问题。@Saif Bechan:好的,综合的方法是命名方法get
或getById
,如果有更多的方法来获取一个问题/几个问题。