PHP面向对象

面向对象内容:

  • - 定义一件事情的抽象特点
  • 成员变量 - 定义在类的内部变量
  • 成员函数 - 定义在类的内部函数
  • 对象 - 类的实例
  • 父类 - 一个类可以被其他类继承的
  • 子类 - 一个类继承于其他类
  • 构造函数 - 实例化对象时自动执行一个函数
  • 折构函数 - 类调用完毕后执行
  • 继承 - 一个子类得到父类的属性和方法
  • 重载 - 函数名字相同,但参数列表不相同,得到的结果也不同
  • 接口 - 定义一个接口规范,一个类实现接口时必须定义这些接口

$this 指向当前对象
parent:: 访问父类的方法

class b {
    function fn () {
        echo 1;
    }
}
class a extends b {
    function box () {
        parent::fn(); // 在内部使用
    }
}
$a = new a;
$a->box(); // 1

final 如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承
static 一个函数被声明为static,则可以在未被继承情况下使用
abstract 定义一个抽象类,继承时必须实现abstract声明的方法
instanceof 检测对象是否是另一个类的实例对象

访问修饰符

  • public 公共的,所有人都可以访问
  • pravate 私有的,不能被继承,但可以在内部访问
  • protected 受保护的,不能在外部访问,可以被继承、可以在内部访问

特殊类方法
__get 访问一个不存在的变量时执行该函数
__set 设置一个变量是执行该函数
__construct 实例化对象时执行该函数
__destruct 销毁对象时执行该函数
__tostring 打印时执行该函数

定义class:

class classA {
    public $value = 10;
    function fn () {
        echo $this->value;
    }

实例化对象:

class classA {
    public $value = 10;  //必须添加public修饰符
    function fn () {
        echo $this->value;
    }
$a = new classA;
echo $a->value; //访问类中的变量
$a->fn(); //访问函数

构造函数:

class classA {
    function __construct($name,$age) {
        $this->name = $name;
        $this->age = $age;
    }
$a = new classA('name',20);
echo $a->name;  //name
echo $a->age;  //20

折构函数:

class classA {
    function __destruct() {
        echo 'over';
    }
}

继承:

class classA {
    public $value = 10;
    function fn () {
        echo 'hello';
    }
class classB extends classA {}
$a = new classB;
echo $a->value; //10

重载:

class classA {
    public $value = 10;
    function fn () {
        echo $this->value;
    }
}
class classB extends classA {
    public $value = 11; // 不会改变父类
    function fn () {
        echo 1;
    }

}
$a = new classB;
$b = new classA;
echo $a->fn(); //11
echo $b->fn(); // 10

/* 另一个例子 */
class reload {
    public function show($o) {
            if (is_object($o)) {
                echo 'object';
            } else if (is_array($o)) {
                echo 'array';
            } else {
                echo 'orther';
            }
        }
}
$a = new reload;
$a->show('str'); // orther
$a->show(array()); // array
$a->show($a); // object

接口:

interface iTemplate {
    public function sayName($name) ;
    public function sayAge($age);
}
class Template implements iTemplate {
    public function sayName ($name) {
        echo $name;
    }
    public function sayAge ($age) {
        echo $age;
    }
}
$a = new Template;
$a->sayName('name');   // name

静态方法:

class classA {
   static function fn () {
       echo 1;
   }
   function fn2 () {
       echo 2;
   }
}
classA::fn(); // 1
classA::fn2(); // 出错

定义为抽象类:

abstract class classA {
    abstract public function fn (); 
}
class B extends classA {
    public function fn () {
        echo 1;
    }
}
$a = new B;
$a->fn();

__get、__set、__tostring

class reload {
    public $value = 10;
    public function __get ($key) {
        return '不存在';
    }
    public function __set ($key,$value) {
        return $this->key = $value;
    }
    public function __tostring () {
        return 'reload';
    }
}

$a = new reload;
echo $a->value; // 10
echo $a->valu; // 不存在
$a->value = 11; // 11
echo $a; // reload 

检查类:

class classA {}
class classB extends classA {}
$a = new classB;
echo $a instanceof classB; // true
echo $a instanceof classB; // true

获取类的信息:

class reload {
    public $value = 10;
    public function __get ($key) {
        return '不存在';
    }
    public function __set ($key,$value) {
        return $this->key = 2;
    }
    public function __tostring () {
        return 'reload';
    }
}

$class = new ReflectionClass('reload');
echo '
'.$class.'
'; //输出 Class [ class reload ] { @@ D:\phpStudy\WWW\php.php 8-19 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [1] { Property [ public $value ] } - Methods [3] { Method [ public method __get ] { @@ D:\phpStudy\WWW\php.php 10 - 12 - Parameters [1] { Parameter #0 [ $key ] } } Method [ public method __set ] { @@ D:\phpStudy\WWW\php.php 13 - 15 - Parameters [2] { Parameter #0 [ $key ] Parameter #1 [ $value ] } } Method [ public method __tostring ] { @@ D:\phpStudy\WWW\php.php 16 - 18 } } }

你可能感兴趣的:(PHP面向对象)