PHP 面向对象-Runoob

toc and abstract.

RUNOOB地址:http://www.runoob.com/php/php-oop.html

2017.10.2 星期一 12:16

一 面向对象内容

类、对象、成员变量、成员函数、继承、父类、子类
多态、重载、抽象性、封装、构造函数、析构函数

二 类定义

class关键字

三 创建对象

new运算符

四 构造函数

function _construct($par1,$par2){}

五 析构函数

function _destruct(){}

六 继承

extends关键字

七 方法重写

八 访问控制

关键字:

  • public:公有的类成员可以在任何地方被访问。
  • protected:公有的类成员可以在任何地方被访问。
  • private:私有的类成员则只能被其定义所在的类访问。
  1. 属性的访问控制
    类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。
  2. 方法的访问控制
    类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

九 接口

  1. 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
  2. 接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
  3. 接口中定义的所有方法都必须是公有,这是接口的特性。
  4. 要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}
// 实现接口
class Template implements iTemplate
{
    private $vars = array();
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
        return $template;
    }
}

十 常量

  • 可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
  • 常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
  • 自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。

    class MyClass
    {
        const constant = '常量值';
        function showConstant() {
            echo  self::constant . PHP_EOL;
        }
    }
    echo MyClass::constant . PHP_EOL;
    $classname = "MyClass";
    echo $classname::constant . PHP_EOL; // 自 5.3.0 起
    $class = new MyClass();
    $class->showConstant();
    echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
    

十一 抽象类

  1. 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
  2. 定义为抽象的类不能被实例化。
  3. 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
  4. 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;
    另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
    此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。

    十二 Static 关键字

  • 声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
  • 静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
  • 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
  • 静态属性不可以由对象通过 -> 操作符来访问。

    class Foo {
        public static $my_static = 'foo';
        public function staticValue() {
            return self::$my_static;
        }
    }
    print Foo::$my_static . PHP_EOL;
    $foo = new Foo();
    print $foo->staticValue() . PHP_EOL;
    

十三 Final 关键字

PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

十四 调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

2017.10.2 12:40

knowledge is no pay,reward is kindness
0%