2011-05-08 41 views
0

是否有可能做这样的事情:如何保护类属性免于在PHP中扩展类?

class foo { 
    private $private = 'A'; 
} 

class bar extends foo { 
    echo $this->private; 
} 

bar returns null... 

我真的很喜欢它,如果变量$私人不是由子类访问,但我不能确定的是它甚至有可能仅仅基于基于分类的发展范式。

私有财产不提供我正在寻找的功能。

我明白,这是不准确的PHP代码,但它只是一个例子)

回答

2

这是怎么回事已经工作。请参阅documentation

属性或方法的可见性可以通过在声明前加关键字public,protected或private来定义。宣布公开的类成员可以随处访问。声明保护的成员只能在类本身以及继承类和父类中访问。 声明为private的成员只能由定义成员的类访问。

在这里看到一个例子:http://codepad.org/Yz4yjDft

私人性质不提供我正在寻找的功能。

对我来说,它似乎正是你想要的。如果没有,请详细说明。

+0

经过一番思考 - 我们的子类没有写入父'private'属性 - 它在该名称空间中创建了自己的变量,因为它不知道父变量存在。我们用parent :: $ private来测试它。有趣的小案例测试;) – 2011-05-08 04:25:30

0
class foo { 
    protected $private = 'A'; 
} 

class bar extends foo { 
    function __construct() { 
     echo $this->private; 
    } 
} 
new bar(); 

// will echo 'A' 

你只需要做一个函数内部处理,你不能有回音只是你类中。

编辑:

保护会让你只在派生类中使用的变量。如果这是你正在寻找的

+0

什么版本的PHP做到这一点? – 2011-05-08 02:00:29

+0

对不起,请参阅编辑2 – Ibu 2011-05-08 02:02:22

+0

我们实际上正在寻找隐藏开发人员的一些变量,使用扩展类。获得批准的答案确实引发了争议。 – 2011-05-09 06:28:05