php课程---面向对象
面向对象:
一:定义类
class Dog { var $name; var $age; var $pinzhong; function Jiao() { echo "{$this->name}在叫"; } }
二:实例化对象
$dog = new Dog();
调用对象的成员:
$dog->name = "旺财";
调用成员方法:
$dog->Jiao();
三、$this关键字(放在类里面就代表这个类实例化出来的一个对象)
$this->$name;this代表该对象,如果要在成员方法中调用成员变量,一定要使用$this找出该成员变量。
完整代码:
class Dog { var $name; var $age; var $pinzhong; function Jiao() { echo "{$this->name}在叫"; //this代表的是当前这个对象 } } $dog = new Dog(); $dog->name = "旺财"; $dog->age = 10; $dog->pinzhong = "哈士奇"; $dog->Jiao() //调用成员方法
四、构造函数:(构造函数是对类进行初始化的,php里面没有函数的重载)
1.执行时间特殊
2.写法特殊
代码如下:
class Dog { var $name; //写访问修饰符时,var就不用写了 var $age; var $pinzhong; function __construct($n,$a,$p) //构造函数的写法,注意是两个下划线相连,前面必须空格 { $this->name = $n; $this->age = $a; $this->pinzhong = $p; } function Jiao() { echo "{$this->name}在叫"; //this代表的是当前这个对象 } } $dog = new Dog("旺财",10,"金毛"); $dog->Jiao() //调用成员方法
五、析构函数(不能有任何参数)
function __destruct() { echo "拜拜"; }
六、封装:
将类里面的成员变量加一个private修饰符变成私有的,目的是为了保护类里面的成员不被外界随意访问,从而确保类的安全性。如果将变量设置为私有,如何去访问:
1.自己写函数get函数set函数,然后来对变量赋值和取值
2.用系统自带的__get()函数和__set()函数来实现类里面的变量赋值取值
function __set($name,$value) { $this->$name = $value; } function __get($name) { return $this->$name; }
完整代码:
class Dog { private $name; //写访问修饰符时,var就不用写了 private $age; private $pinzhong; function __set($name,$value) { $this->$name = $value; } function __get($age) { return $this->$age; } function __construct($n,$a,$p) { $this->name = $n; $this->age = $a; $this->pinzhong = $p; } function Jiao() { echo "{$this->name}在叫,它{$this->age}岁了"; } function __destruct() { echo "拜拜"; } } $dog = new Dog("旺财",10,"金毛"); $dog->name = "小强"; $dog->age = 3; echo $dog->age; $dog->Jiao() //调用成员方法
七:继承
继承一般是单继承:一个儿子只能有一个父亲
子类可以继承父类的所有成员
class HashiQi extends Dog //dog是父类 HashiQi是子类
{
}
子类可以对父类的成员方法进行重写:(函数名一样),如果要在子类方法中调用父类的方法,用parent::Jiao();
function Jiao() { parent::Jiao(); //parent代表父类 ::代表调用方法,用类名调用 echo "hello"; }
完整代码:
class Dog { private $name; //写访问修饰符时,var就不用写了 private $age; private $pinzhong; function __set($name,$value) { $this->$name = $value; } function __get($age) { return $this->$age; } function __construct($n,$a,$p) { $this->name = $n; $this->age = $a; $this->pinzhong = $p; } function Jiao() { echo "{$this->name}在叫,它{$this->age}岁了"; } function __destruct() { echo "拜拜"; } } class HashiQi extends Dog //dog是父类 HashiQi是子类 { function Jiao() { parent::Jiao(); //parent代表父类 ::代表调用方法,用类名调用 echo "hello"; } } $dog = new HashiQi("旺财",10,"金毛"); $dog->name = "小强"; $dog->age = 3; echo $dog->age; $dog->Jiao() //调用成员方法
final关键字可以定义该类为最终类,不可被继承
静态:
关键字:static ,如果成员声明了为静态的,那么该成员是属于该类的,不是属于对象的
如何调用静态的成员:
HaShiQi::$height = 10;
HaShiQi::Gao();
用类名加双冒号调用类的静态成员