php中静态方法和普通方法的区别初探(一)
2016-09-01 09:22
253 查看
最近在做一个小项目练手的时候,再次遇到静态方法和普通方法的区别问题。以前模模糊糊的得过且过,这次没有在放过,通过小例子深入理解了下。
Student类继承了Peson类的 left() 和 run() 方法,可以看出 run() 中的$this此时指代当前被实例化的类Student,所以它没有指向Person类的 left() 方法。
让我们继续。
将两个类中的方法都设为静态方法。
可以看出 Person::run() 中的 self 此时指代父类Person。
联系到以前看到的技术大牛的文章,我理解到 静态方法属于“类”的“财产”,它的作用范围是被划定在所属类中的,即使该类的子类存在同名静态方法,它也不会调用。self 的意思是指静态方法所属的类。
普通方法不属于“类”的“财产”,它的作用范围会被划定在继承了这个普通方法并且已经实例化的子类中,如果该子类中存在同名的普通方法,就会调用子类中的这个方法。$this的意思是当前对象,即继承了该普通方法并且已经实例化的当前类。$ 很生动,因为在php中 $ 用于声明调用变量,类是固定的,但是一个类可以实例化出很多对象,对象是不固定的所以用 $ 很生动。
class Person { public function left() { echo 'Person turn left'; } public function run() { $this->left(); } } class Student extends Person { public function left() { echo 'Student turn left'; } } $student = new Student(); $student->run(); ------------ Student turn left ------------
Student类继承了Peson类的 left() 和 run() 方法,可以看出 run() 中的$this此时指代当前被实例化的类Student,所以它没有指向Person类的 left() 方法。
让我们继续。
将两个类中的方法都设为静态方法。
class Person { public static function left() { echo 'Person turn left'; } public static function run() { self::left(); } } class Student extends Person { public static function left() { echo 'Student turn left'; } } ------------ Person turn left ------------
可以看出 Person::run() 中的 self 此时指代父类Person。
联系到以前看到的技术大牛的文章,我理解到 静态方法属于“类”的“财产”,它的作用范围是被划定在所属类中的,即使该类的子类存在同名静态方法,它也不会调用。self 的意思是指静态方法所属的类。
普通方法不属于“类”的“财产”,它的作用范围会被划定在继承了这个普通方法并且已经实例化的子类中,如果该子类中存在同名的普通方法,就会调用子类中的这个方法。$this的意思是当前对象,即继承了该普通方法并且已经实例化的当前类。$ 很生动,因为在php中 $ 用于声明调用变量,类是固定的,但是一个类可以实例化出很多对象,对象是不固定的所以用 $ 很生动。
相关文章推荐
- 详谈php静态方法及普通方法的区别
- php静态方法及普通方法的区别
- php静态方法与非静态方法在性能上有什么区别?
- 关于PHP静态方法调用和实例化类调用的区别
- static 静态方法 有什么优缺点 PHP中静态方法(static)与非静态方法的使用及区别
- PHP中 static 静态方法有什么优缺点 静态方法与非静态方法的使用及区别
- PHP中静态方法(static)与非静态方法的使用及区别
- Java初学者Paulmarkyes---中静态代码块,普通代码块,构造代码块,构造方法先后执行顺序以及区别
- php 静态属性和静态方法区别详解
- PHP中静态方法(static)与非静态方法的使用及区别
- php静态方法与非静态方法用法区别详解
- 浅析PHP中静态方法与非静态方法的用法区别
- 浅析php静态方法与非静态方法的用法区别
- PHP静态方法与非静态方法的区别
- PHP中静态方法(static)与非静态方法的使用及区别
- synchronized用于静态方法和普通方法区别
- python 类中 普通方法,类方法,静态方法的区别?
- 普通成员变量与静态成员变量的区别、普通成员方法与静态成员方法的区别
- 浅析php静态方法与非静态方法的用法区别
- PHP中静态方法和实例化方法的区别