首页 > 代码库 > PHP面向对象关键知识点回顾
PHP面向对象关键知识点回顾
一,类中的析构函数(__destruct):
析构函数是自动调用的
析构函数主要用于销毁资源
析构函数的调用顺序是先创建的对象最后被销毁(原理是栈的先进后出)
析构函数什么时候被调用
(1)当程序(进程结束)推出时
(2)当一个对象成为垃圾对象时候,该对象的析构方法也会被调用
(3)所谓垃圾对象,就是指没有任何变量再引用它(没有变量再只指向堆中的对象)
(4)一旦对象成为垃圾对象,析构函数就会立即被调用
二,类中使用静态变量(static)
静态变量的引入是为了解决不同的对象实例能够共享同一个变量的问题
静态变量的申明:【访问修饰符】 static $变量名
静态变量的使用:
(1)在类内的使用:SELF::$变量名 或者是 类名::$变量名
(2)在类外的使用:类名::$变量名 或者是 对象名名::$变量名
静态变量与全局变量($global)的比较
之所以在类中引入静态变量是因为:静态变量比全局变量更节省内存,更好的支持变相对象的封装性。
三,类中使用静态方法
静态方法主要是用来并只能用来操作静态变量的
静态方法的使用:类名::方法名 或对象名::方法名
泪的成员方法也能操作静态变量
四,类的继承
php不支持多重继承,如class A extends B,C{}这样是错的
继承中若子类要重写父类的方法,子类方法和父类方法的访问修饰符可不一样,但是子类的访问范围必须大于等于比父类的,比如父类中的方式是public子类中的是protecte这样是不允许的。但是父类的方法若是protected子类的该方法可以是protected或者是public。
php中的方法重载是通过__call实现 的:
class A { public function test1(){ echo "test1<br>"; } public function test2($param){ echo "test2".print_r($param); } public function __call($method,$paramArr){ if ($method=="test") { if (count($paramArr)==0) { $this->test1(); } if (count($paramArr)==1) { $this->test2($paramArr); } } } } $a = new A(); $a->test(); $a->test("zjl");
php子类不会自动调用父类的构造函数,若要调用父类的构造函数用parent::__construct()
php中多态的体现主要是子类是否重写父类中的方法。子类重写和不重写父类中的方法方法的执行会有两种不同的状态
六,__set和__get的使用:
class student { private $name="ZJL"; private $age="24"; public function show(){ echo $this->name."<br>".$this->age; } public function __set($var,$value){ $this->$var = $value; } public function __get($name){ if(isset($name)){ return $this->name; } else{ return null; } } } $stu = new student(); $stu->name = "zjl"; $stu->age = "23"; $stu->show(); echo "<br>".$stu->name;
七,php中的抽象类
为什么要设计抽象类这个技术?
设计抽象类,主要是由于在实际开发中我们可能有这样一种类,是其他子类的父类,但是它本身并不需要实例化,主要用途是让子类继承,这样可以实现代码复用。同时利于项目设计者设计类这样能够使不同开发者有一个同统一的规范,不会导致各个开发者写出来的类出现五花八门的情况。
简单例子:
abstract class Transport{ public $wheel; abstract public function move(); } class Car extends Transport{ public function move(){ echo "the car is moving!"; } } $car = new Car(); $car->move();
3.抽象类的注意事项
(1)基本用法
abstract class 类名{
//方法
//属性
}
(2)如果一个类使用了abstract来修饰,则该类是抽象类(不能被实例化),如果一个方法被abstract修饰,则该方法是抽象方法抽象方法不能实现(不能有方法体)
(3)抽象类可以没有抽象方法,同时还可以有实现了的方法
(4)如果一个类中只要有抽象方法则这个类必须是抽象类
(5)如果一个类继承了抽象类则它必须实现该抽象类的所有抽象方法(除非它自己也是抽象类)