我正在学习OO和类,我对PHP中的OO和类有几个问题
据我所知,扩展另一个类的类只是意味着扩展另一个类的类可以访问变量/属性以及它所扩展的类的函数/方法。这是对的吗?
我知道静态方法或属性与类外的过程函数或变量基本相同,几乎可以在任何地方使用。这是对的吗?
Public表示任何类都可以访问它,Private表示只有封装的类或者从可以访问和使用的所有者扩展的类。这是对的吗?
答案 0 :(得分:11)
1)是的,这是正确的。子类继承其父级的任何protected
或public
属性和方法。声明private
的任何内容都无法使用。
2)这是真的。只要加载了类(这与以前的自动加载问题相符),您可以通过范围解析运算符(::)访问静态方法,如下所示:ClassName::methodName();
3)你有public
的含义是正确的,但正如我前面提到的,private
方法只能由声明它们的类使用。
class parentClass
{
private $x;
public $y;
}
class childClass extends parentClass
{
public function __construct() {
echo $this->x;
}
}
$z = new childClass();
上述代码将导致触发NOTICE
错误,因为$ class无法访问$ x。
注意:未定义的属性: childClass :: $ X
如果$ x被声明为protected
,那么childClass
就可以访问了。编辑:声明为protected
的属性可由声明它的类以及扩展它的任何子类访问,但不能访问“外部世界”。这是public
和private
之间的一个很好的中间。
答案 1 :(得分:0)
For 1.据我所知,扩展另一个类的类只是意味着扩展另一个类的类可以访问变量/属性以及它所扩展的类的函数/方法。这是对的吗?
ANS:这是正确的,但并非全部。扩展类还可以通过重写扩展类的方法来自定义扩展类。而且,它还可以通过添加新的字段和方法来扩展超类功能。
For 2.我知道静态方法或属性与类外的过程函数或变量基本相同,几乎可以在任何地方使用。这是对的吗?
ANS:是的,这是正确的,只要该类是公共的并加载并且属性和方法是公共的,zombat就会说。换句话说,您正在使用该类作为这些元素的名称空间。
For 3. Public表示任何类都可以访问它,Private表示只有封装的类或者从可以访问和使用的所有者扩展的类。这是对的吗?
ANS:将其视为物理属性,每个人都可以使用公共计算机(在图书馆),您的私人计算机(可能)只能由您使用。
刚加入Zambat评论。
答案 2 :(得分:-2)
几乎没有必要声明任何私有内容,因为一般规则使用受保护的。