2012-12-19 12 views
2

开始一个新的PHP项目,并决定经过几年的PHP开发,我想我应该真的开始使用PHP类。我习惯于C++世界中的类,所以在将这些知识移植到PHP时,我不太确定哪些内容。PHP:从一个类中调用类功能

在C++中,您可以自动访问任何没有前缀的类变量,在PHP中,似乎您需要在this->前缀所有这些访问(变量和函数)。我知道什么this是(或者至少我认为是这样,指向当前类实例的指针),但我不确定它是必需的还是首选的,或者是否有其他选择。我的班级将在相同的班级(即其本身)​​内使用其他功能,因此每次输入this->都会很快耗费时间。

这些类本身很可能是单例,所以我不确定是实际使用一个类,还是只在函数前加一个标识符。

+0

单身一般是有害的,但在PHP中根本没有任何好处。我建议你重新设计你的设计。这不是作为答案发布的,因为它不回答你问的问题。祝你好运。 –

+1

正如Levi上面提到的,这听起来像您的设计可能需要一点修改。你能给出一个关于你的类可能是什么样子的顶级示例吗?如果你知道你的课程将会自我引用很多,也许有很多你可以分成其他课程。 – James

+0

给自己一个好的IDE,你不会担心输入'$ this'会变得很耗时。您会发现它实际上可以节省您的时间,因为它可以根据可用的属性自动完成。 – RobMasters

回答

2

“指针”(->)!= C++指针。

$this表示当前的类和实例。所有变量都可以通过使用$this->variable;$this->function();来访问。

静态变量和函数可以使用self::$variableself::function()

以外的类的实例来访问,你必须指明类的实例:$foo->variable;$foo->function();

据我所知,目前还没有办法在不使用$this->self::

访问类内部的公共/私有/静态/常量变量关于使用函数的对象...由您决定。您是否计划在稍后扩展代码以添加更多功能?所有的功能都有些相关吗?如果他们是单身职能,那么仅仅写一个职能而不是一个职业是没有害处的。这实际上取决于你想要完成什么。

+0

你总是可以使用'ReflectionClass'及其兄弟'Reflection *'类来访问没有'$ this'的内部类项目。不会推荐它用于此用途,但可以完成。 –

+0

非常真实,没有想到这一点。但是7个字符('$ this->')的OPs点太多以至于无法重复输入可能意味着使用函数调用来检索类变量也会太多。 –

6

为了访问成员,需要引用成员所属的对象。

每个方法调用或属性访问的前缀为$variable-> - $this是引用当前对象实例的魔术变量。它的使用不是可选的。

这是(其中的原因),因为并不是PHP中的每个函数都是一个方法,所以还有全局函数。如果您引用一个函数而不将其与某个对象相关联,则它被假定为一个全局函数。

作为一个附注,你应该避免在PHP中使用singletons - 使用它们不会有性能/内存的增益,因为每个并发执行的脚本都是花园式的进入它自己的内存空间。

0

是的,访问类方法或变量时必须使用$this

你要记住,PHP不需要变量声明,所以像下面的情况:

<? 
class A { 
    public $a = 'Hello World!'; 
    function hello() { 
    $a = 'hello'; 
    echo $a; 
    } 
} 

$object = new A(); 
echo $object->hello(); 

$a将是局部范围$this->a将是类变量。