$this cannot be used in static functions in classes because static memory space is generated without instantiation, while classes need to be instantiated before memory space is generated. The two memories are not together and cannot access each other.
So the following writing is wrong;
<span style="font-family: 微软雅黑, "Microsoft YaHei";">class Book extends Goods {<br/> public $anthor;<br/> public $publisher;<br/> static public function get_author($author){<br/> $this->author = $author;<br/> } <br/>}</span>
That is to say, $this can only be used by calling non-static methods using objects
The non-static method can only be determined after the object has determined the value of $this
1. Which object calls the calling method, $this in the method is that object
Just like the following:
This also shows that $this has nothing to do with the position of which class, only with which object is instantiated.
2. The object environment can be passed down:
If it is within the current method, it has been determined Object environment, if there is a static call to a non-static method in the cover method, then the current object environment will be passed down to the statically called non-static method,
$this It is not the object that always represents where you are tired.
public Shared
protect Protected
private Private
is used to describe where a member (property, method) can be accessed.
Note:
PHP uses the concept of classes to modify and qualify members.
PHP divides the accessed code into three areas: within the class, outside the class, and within the class on the inheritance chain.
It is decided based on where the member is accessed and where the member is defined
Take property as an example
public
Public means that the members are within this class, within the class on the inheritance chain, and Outside the class, everything can be accessed!
protect
Protected refers to classes whose members are within this class and on the inheritance chain (subclass, parent class) Can be accessed
private
Private means that only within this class can be accessed!
How to choose:
One principle is to try to reflect the encapsulation. Encapsulation means hiding the internal implementation as much as possible and only developing external operation interfaces!
Syntax is to privatize (protect) the properties and methods that are not needed for external use, leaving only some necessary public methods!
1、一定要先明确访问的是哪里定义的!
2、私有成员不能被重写
只有在自己的类中才能访问到对应的私有成员
建议是
如果需要通过继承,你就使用保护的,少用私有的!
在没有继承时,尽量使用私有的!
3、在重写时,如果重写成员的访问级别不一致。子类的级别比父类的级别,相等或者弱,可以!强,不行!
这样是语法规定,如果想解释也是很简单的
是这样的,我简单说明
1 基类有一个方法,比如 // 我们不考虑Object作为所有类的基类啦。 呵呵呵!
public void method1(){ method2(); // 此方法需要调用method2(); } public void method2(){ // 如果这个方法是abstract 的话,也许会看得更清楚,不过不常见. }
2 子类重写了
@Override private void method2(){ // 当然,编译错误,我们只是用来说明这样做的问题 }
3 子类的子类
如果他调用 method1() 会出现什么后果呢?
a) 他能访问method1(), 因为那是他的基类,且是public
b) 但很可惜,method1()里面 却不能访问method2()了,因为在父类是private的了。
这岂不是很可笑的情况。
所以,子类不能比父类的更私有,但可以更公开。 呵呵。这样才能保证父类已经实现的代码能够使用。
另:从5.0开始,子类方法override时,可以返回与父类不同的类型。但参数必须完全相同。
4、
1, 兼容性的问题
早先的 php的面向对象不完善,没有访问控制!
在声明属性时,使用 var 关键字!
声明方法时,什么都不使用!function
为了兼容,上面的做法还是可以使用!
var, function。访问权限都是public的!
相关推荐:
The above is the detailed content of Detailed explanation of the usage and access qualifiers of $this in PHP. For more information, please follow other related articles on the PHP Chinese website!