调用第二类静态方法来声明变量的类
为什么我不能做到这一点:调用第二类静态方法来声明变量的类
class MyClass{
public $dir = 'root/'.Util::getDir();
public function getURL($file){
$fullUrl = $this->dir . $file;
return $fullUrl;
}
}
echo MyClass::getUrl('my.pdf');
基本上,问题出在第二行。在类中声明变量时,我无法调用静态方法。
你不能这样做,因为语言不支持它。
在PHP5对象模型中,方法是静态的或动态的。你必须选择。同上类属性。
但是,没有什么可以阻止你使用私有类变量,并通过声明__get()来调用静态方法,无论是在类中还是在类外调用对象重载。只要执行isset测试私有变量并调用静态方法在第一次调用。
请记住,您始终可以使用self::
构造引用静态属性和方法。
不要你必须做一些像
class MyClass{
public $dir;
public function setDir(){
$this->dir = 'root/'.Util::getDir();
}
}
不幸的是,我不能这样做,因为我会静态地调用类MyClass。 问题是,当它的值来自静态方法时,我甚至无法定义$ dir。 – 2012-07-06 10:38:36
嗯,我不认为我可以帮忙,我的大脑需要一些睡眠抱歉。 – 2012-07-06 10:40:43
我已经使用更清晰的例子编辑了我的问题。 – 2012-07-06 10:44:46
您在编译分配$目录,你可以在对象初始化
class MyClass{
public $dir;
public function __construct(){
$this->dir = 'root/'.Util::getDir();
}
}
在构造函数中执行此操作时,你会创建该类$this->dir
将被设置的实例。
可以在构造函数中调用是的静态方法 – 2012-07-06 10:53:56
但是,如果静态调用MyClass :: getURL()会调用构造函数吗? – 2012-07-06 10:55:13
好的,我错过了point.you不能使用$这在任何静态方法,你为什么不做这个类MyClass { 公共职能getURL($文件){ $ fullUrl ='root /'。Util :: getDir ()。$文件; return $ fullUrl; } }你不能使用其他静态变量并使用self。 – 2012-07-07 13:49:58
,你需要将它定义为:
public static $dir= '/some/path/';
那么你可以做:
self::$dir;
在静电功能。
我想知道如果我第一次不能使用__construct方法来设置这个变量,但我不知道构造方法是否会运行,如果类/方法被称为stataically像: 'echo MyClass :: getUrl('my.pdf');' – 2012-07-06 10:51:06
我们刚刚完成了更新。保持静态和非静态方法和属性在你的头脑和编程中分开。如果属性或方法具有特定于对象的上下文或功能,则它不能是静态的。它必须是'$ a-> property'的形式。 V.V.如果它在所有类对象中不变,那么它确实应该是静态的。 – TerryE 2012-07-06 10:57:13
@ user1364793,__construct()在执行'new ClassName()'时运行如果要初始化静态属性,则创建一个静态方法,比如说'setup()'并调用'ClassName :: setup()'作为你的脚本初始化 – TerryE 2012-07-06 14:31:11