PHP基础语法学习要点5
面向对象
-
$this
这个
$this
把类指向一个对象的实例:-
对象是通过类实例化来的。每个实例的对象相互是独立的(类是模板,对象是生产出来的产品。)
-
$this
指的就是当前的这个实例、对象代称。
PSR的标准规范。
-
-
构造函数、构造方法
这个函数、方法中的代码应该在创建对象的时候将该对象设置为稳定、安全的初始状态。就是用来初始化。
__construct(参数1,参数2....)
在创建一个对象时候首先要做的事就是调用构造函数、方法
注意:
-
在其他语言中,构造函数就是和类同名的方法,在PHP的早期版本中可以这样使用,但是在新版本中不建议使用。
-
-
析构函数、析构方法
析构函数通常用来收尾,因为析构函数会在某个对象被删除(回收)的时候自动调用。
__destruct(void)
,不用任何参数。注意:
-
析构函数,当对象被显式地销毁时候也会被调用。
-
在调用exit的时候也会被调用。
-
和封装有关的魔术方法
魔术方法:在某个时刻自动调用的方法。函数名称不区分大小写,变量名区分大小写
-
__get(属性名)
,读取不存在或设置为private或protected
,的属性的时候自动被调用。注意:
-
自动调用__get()的结果(reutrn的值)会返回调用处。
-
把属性名自动传递进来作为参数了。
-
__get()
修饰必须为public,该方法不是必须要有的。
-
-
__set(属性名,属性值)
,设置不存在或设置private、protected的属性的时候自动被调用。注意:
-
该方法也只能设置为public
-
该方法不需要有返回值,及时设置了返回值也没什么用。
-
-
__isset(属性名)
,当对不可访问的属性或不存在的属性调用isset()函数或empty()函数时候,自动调用。 -
__unset(属性名)
,当对不可访问属性调用unset()时,__unset()会被自动调用。
继承
PHP中只支持单继承。
子类中重载父类的方法:
可以使用parent::方法名()
注意:
-
访问对象中的成员是使用
->
使用::
访问类,parent::say()
指的就是访问父类中的say()
方法,parent代词代指父类。 -
也可以使用
类名::方法名()
来进行调用,但是不建议使用。 -
也有人直接使用
类名::方法名()
这种方式来替代实例化。 -
如果使用第三种方法来调用类中的方法的时候,方法体中不能出现
$this
final关键字
继承有时候会破坏封装性。
-
final对于类来说,将会终止类的继承(不能再有子类了),但是本类还是可以正常使用的。
-
final对于方法来说,不能被覆盖/覆写。
注意:
-
final用来修饰成员方法和类、不能修饰成员属性。
-
使用final的时候请你仔细考虑一下,这个类真的以后不用继承了吗?这个类如果被继承的话以后某个方法会不会被覆盖。
static关键字
-
用static修饰的成员属性,可以被同一个类、在同一个页面实例化出来的多个对象所共享。
-
静态属于类级别,不是对象级别。所以使用
类名::$属性名
进行调用。 -
静态的只保存一份数据、非静态的(实例化)有多少个对象就保存多少份。
-
将类中的成员标识为静态的,修饰成员属性和成员方法。不能修饰类。
-
静态属于类级而不是对象级别。
-
在静态方法中使用静态属性,可以使用
类名::$属性名
也可以使用self::$属性名
-
在静态方法中也可以使用静态方法,使用的时候可以用
类名::方法名()
或self::方法名()
访问。 -
在类外部调用的时候可以使用
类名::方法名()
/类名::$属性名
来进行调用,也可以使用对象::方法名()
/对象::$属性名
来进行调用。这种对象名::方法名()
的这种方法不建议用。
总结:
-
用static修饰的成员属性,可以被同一个类的所有对象所共享,因为静态成员对于同一类只保留一份数据。
-
类静态成员(属性、方法),在本类内部使用时,可以使用
类名::静态成员
方式来调用也可以使用self::静态成员
来进行调用。 -
类静态成员(属性、方法),在类外部进行调用的时候可以使用
类名::静态成员
方式来调用,也可以使用对象名::静态成员
来调用。
注意:
-
静态方法中不能访问非静态的成员。(在非静态方法中可以访问非静态方法、属性也可以访问静态方法、属性)
-
如果确定一个方法不使用非静态的成员,则可以将这个方法声明为静态方法(不用创建对象就能使用。)
const关键字
常量:常量定义后不能更改。类中也有常量。
类中的常量和普通常量的区别:
-
类中的常量是给本类用的,和本类是息息相关的。
-
普通的常量,在任何地方都能用。
格式:const 常量名=值
-
类常量使用在内部可以使用self::常量名也可以使用类名::常量名
-
类外部定义的常量的使用方法和普通的常量的使用方法是一样的。
-
类常量使用在外部可以使用对象名::常量名也可以使用类名::常量名。
-
类中的常量是不能更改的,在常量初始化的时候需要就给定值。