什么是面向对象?面向对象的简单了解!返回列表
上传时间:2015-02-02 内容关键字:什么是面向对象?面向对象的简单了解!
2. public protected :都可以继承,并拥有访问和修改的权限。
比如:家产已经继承,爱卖就卖,爱改就改。
class Human{
protected $wine="1斤";
public function play(){
echo "谈理想
";
}
}
class Stu extends Human{
public function play(){
echo "玩网游
";
}
public function momo(){
echo "美女,认识一下
";
}
public function show(){
echo $this->wine,"
";
}
}
$lisi = new Stu();
$lisi->show();//父类有的,继承过来
$lisi->play(); //父类有的,继承过来可以修改和覆盖
$lisi->momo();//父类没有的,可以增加
3. 继承时的权限变化:
class Human{
public function play(){
echo "谈理想
";
}
}
class Stu extends Human{
private function play(){
echo "玩网游
";
}
}
$lisi = new Stu();
$lisi->play();
Fatal error: Access level to Stu::play() must be public (as in class Human) in
子类的cry比父类的cry方法权限要严格,这不行。
继承自父类的属性和方法在覆盖或者重写的时候一定要比父类的宽松或者相同。
4. 构造函数的继承:
构造方法也是可以继承的,而且继承的原则和普通方法一样。进而,如果子类也声明构造函数,则父类的构造函数被覆盖!如果父类的构造函数被覆盖了,自然只执行子类中的新的构造函数。
问题:如果一个数据库类,或者model类,我们肯定是要继承过去再使用,不能直接 操作model类,而model类的构造函数做了很多的初始化工作。我们如果重 写构造函数以后,导致父类的初始化工作被覆盖而不能完成。怎么办?
答案:子类继承父类以后,为了保留父类的构造函数中的业务逻辑,可以先在子类的 构造函数中调用parent::__construct();这样就会先执行父类中的业务逻辑,然 后再执行子类中拓展的逻辑。
class MyDB extends mysql{
public funtion __construct(){
parent::__construct(); //如果子类继承时,有构造函数,保险一点,
//然后再写自己的业务逻辑。
$this->ini();
}
public function ini(){
如果有更多的业务逻辑需要初始化,则把这个方法在构造函数中调用,
就起到了相当于构造函数的目的。
}
}
5. public,private,protected区别:
public : 类外可以调用, 可以被子类继承
protected: 类外不可以调用,可以被子类继承
private : 类外不可以调用, 不可以被子类继承。
(private其实可以被继承,但是系统有标记,标记为父类层面的私有属 性,所以子类无权修改或者调用)
3. 多态:
概念:多态其实就是只抽象的声明父类,具体的工作由子类对象继承父类后具体来完成。这样不同 的子类对象完成不同特点的工作了。
注意:因为如果按PHP本身特点,是不检测类型,本身就可以说是多态,甚至是变态的。PHP5.3 以后,引入了对于对象类型的参数进行检测。只检测对象所属的类。其实这样做对于php 来说是限制了其灵活性,达到了java中多态的效果。
实例:
Glass参数必须是$g要传进来这个对象的父类名字,对应的所有子类实例化后才可以都通过。比如new Pig()的父类不是Glass,这个时候就不会通过类型验证。如果不Glass位置的参数不是父类的话,只是一个子类的话,比如是BlueGlass的话,$g就只能是类BlueGlass类实例化以后的对象。注意:public function ons(Glass $g)中间是空格,不是逗号。
class Light{
public function ons(Glass $g){
$g->display();
}
}
class Glass{
public function display(){}
}
class RedGlass extends Glass{
public function display(){
echo "red";
}
}
class BlueGlass extends Glass{
public function display(){
echo "blue";
}
}
class Pig{
public function display(){
echo "八戒,八戒!";
}
}
$light = new Light();//造手电筒
$red = new RedGlass();//造红玻璃
$blue = new BlueGlass();//造蓝玻璃
$light->ons($red);
$light->ons($blue);
//$light->ons(new Pig());按照上面的参数,这个是通不过类型检验的。
- 上一篇:php-fpm 基础介绍
- 下一篇:COOKIE、SESSION之彻底搞定!