• php学习----面向对象


    面向对象

    项目代码都应该由单个能起子程序作用的对象组成

    重用性、灵活性、扩展性

    变量 $this 代表自身的对象。

    PHP_EOL 为换行符。

    PHP 中创建对象

    类创建后,我们可以使用 new 运算符来实例化该类的对象:

    $runoob = new Site;
    $taobao = new Site;
    $google = new Site;

    1、类

    属性

    访问控制:public 公有 private 私有 protected 受保护

    方法

    在面向过程的程序设计中function叫做函数,在面向对象中function则被称之为方法。

    例:我们可以这样定义方法:

    class Car {
        public function getName() {
            return '汽车';
        }
    }
    $car = new Car();
    echo $car->getName();

    使用关键字static修饰的,称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号::。

    class Car {
        public static function getName() {
            return '汽车';
        }
    }
    echo Car::getName(); //结果为“汽车”

    构造函数

    构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。

    PHP 5 允许开发者在一个类中定义一个方法作为构造函数,语法格式如下:

    void __construct ([ mixed $args [, $... ]] )

    在上面的例子中我们就可以通过构造方法来初始化 和​title 变量:

    function __construct( $par1, $par2 ) {
       $this->url = $par1;
       $this->title = $par2;
    }

    class Com{

    public function __construct()//构造初始化

    {

    echo "1++++++";

    echo "2+++++++";

    }

    public function game(){

    echo "wan youxi";

    }

    }

    $Com= new Com();

    $Com->game();

    如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。

    class Car {
        private function __construct() {
            echo 'object create';
        }
    ​
        private static $_object = null;
        public static function getInstance() {
            if (empty(self::$_object)) {
                self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
            }
            return self::$_object;
        }
    }
    //$car = new Car(); //这里不允许直接实例化对象
    $car = Car::getInstance(); //通过静态方法来获得一个实例

    析构函数

    析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

    PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,其语法格式如下:

    void __destruct ( void )

    类常量

    class Computer{

    const YES=true;//定义类常量

    const NO=false;

    const ONE=1;

    const TWO=self::ONE+1;//self::用来调用类常量

    }

    var_dump(Computer::YES);

    类的继承

    PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:

    class Child extends Parent {
       // 代码部分
    }

    PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

    • public(公有):公有的类成员可以在任何地方被访问。

    • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。

    • private(私有):私有的类成员则只能被其定义所在的类访问。

    默认都为public,外部可以访问。一般通过->对象操作符来访问对象的属性或者方法,对于静态属性则使用::双冒号进行访问。当在类成员方法内部调用的时候,可以使用$this伪变量调用当前对象的属性。

    类属性的访问控制:

    类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。

    方法的访问控制:

    类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

    方法重写

    如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

    调用父类构造方法

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

    如果子类也有构造方法,则先调用父类的,然后调用子类的

    Final 关键字

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

    以下代码执行会报错:

    <?php
    class BaseClass {
       public function test() {
           echo "BaseClass::test() called" . PHP_EOL;
       }
       
       final public function moreTesting() {
           echo "BaseClass::moreTesting() called"  . PHP_EOL;
       }
    }
    ​
    class ChildClass extends BaseClass {
       public function moreTesting() {
           echo "ChildClass::moreTesting() called"  . PHP_EOL;
       }
    }
    // 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
    ?>

    总结

    类是一类东西的结构描述,而对象则是一类东西的一个具体实例,例如汽车这个名词可以理解为汽车的总类,但这辆汽车则是一个具体的汽车对象。

    类与对象看起来比较相似,但实际上有本质的区别,类是抽象的概念,对象是具体的实例。类可以使程序具有可重用性。

  • 相关阅读:
    如何使用KeyChain保存和获取UDID
    ios 使用keychain来存储token
    关于button中设置文字不显示的问题
    实现uitable cell中点击button设置当前cell为选中状态
    setImageEdgeInsets 和 setImage配合使用达到button区域大并可调节其上图片显示区域大小的效果
    C#之Action的实际应用例子
    ConcurrentQueue队列的基本使用方式
    【转】C#中base关键字的几种用法
    C# Activator和new的区别
    C#回调浅析(委托、接口回调)
  • 原文地址:https://www.cnblogs.com/zw1sh/p/10181461.html
Copyright © 2020-2023  润新知