我知道您可以使用如下变量名来调用函数:
$foo = "bar";
function bar()
{
echo "test";
}
$foo(); // echos test
我想知道在课堂上,实际的功能是否会覆盖 如果我有这门课:
class myClass{
public $test;
public function __construct()
{
$this->test = new myOtherClass;
}
public function test()
{
echo "foo";
}
}
这两种方法都能正常工作吗?
$obj->test(); // echo foo
$obj->test->method(); // access a method of myOtherClass
编辑:最初的想法是myOtherClass
持有一个类,其中包含一个始终被访问的主函数,以及一些其他访问较少的函数。我可以使用test()
将主函数链接到类,这样可以减少输入。但鉴于第一个答案,我可能会远离那个。
答案 0 :(得分:4)
我不太清楚PHP能够回答你的问题,但我花了几年时间来维护产品,并且想指出一个严重的可维护性问题。考虑一下你是否能正常工作的问题。现在考虑维护代码的人将(a)与你有相同的问题,并且(b)可能不会阅读整个班级(除非它是非常小班级)。如果你从课外改变$ test,那将更难理解。
虽然这是一个有趣的问题,特别是从学术角度来看,从维护的角度来看,这是一种可怕的做法。 请为不同目的使用不同的变量名称;例如,使用$ otherClass作为指向另一个类的指针,使用test()作为测试函数,你的维护者(包括你自己,如果你维护自己的代码)会诅咒你少:)
答案 1 :(得分:2)
PHP允许使用相同名称的不同符号。与JavaScript和其他一些语言不同,PHP中的对象属性和方法完全不同:
// all of them work OK
define('SomeClass', 'SomeClass');
function SomeClass () {}
class SomeClass {}
这会导致PHP 5.3中的丑陋问题:
$foo = new StdClass;
$foo->bar = function () {
return "bar";
};
$foo->bar(); // does not work, unfortunately :(
答案 2 :(得分:1)
您写道:
$obj->test(); // echo foo
$obj->test->method(); // access a method of myOtherClass
是的,这就是它的工作原理。你没有在那里使用任何变量。
$obj->test; // member variable $test of $obj
$obj->test(); // method test() of $obj
$obj->$test(); // variable function, result depends on content of $test
$obj->test()->otherTest(); // invokes otherTest() on an object
// returned by $obj->test()
$foo = 'test';
$bar = 'otherTest';
$obj->$foo()->$bar(); // same as above, but please, for the love of God,
// don't ever use this. ;)