设为首页 加入收藏

TOP

PHP面向对象特性(一)
2019-08-23 00:31:44 】 浏览:52
Tags:PHP 面向 对象 特性

创建对象

$对象名 = new 类名();
$对象名 = new 类名;
  • new 是一个关键字,表示创建一个新的实例。
  • 在类定义内部,可以用 new selfnew parent 创建新对象。

成员属性

成员属性必须要有访问修饰符,如果不写,会报错。

成员属性的默认值为NULL。

示例:

class Test {
    
    public $name; //共有
    protected $height; //保护
    private $age; //私有
} 

成员方法

成员方法如果不写访问修饰符,则默认为public。

我们可以指定成员方法里的参数的类型,如 类类型,或者数组类型(array),也可以是接口类型,但是接口类型要注意,因为接口没有实例,当我们声明参数类型为接口类型的时候,那么传入的参数只要是实现了该接口的类的实例即可。

示例:

class Test {
    
    function hello() {} //默认为public
    public function say() {} //公有
    protected function smile() {} //保护
    private function laugh() {} //私有
}

构造方法

  • 一个类里只能有一个构造方法
  • 没有返回值(即使在构造方法里写了返回值也没有意义)
  • 在创建一个类的新对象时,系统会自动的调用类的构造方法完成对新对象的初始化。
  • 如果我们没有重写默认构造函数,那么系统会默认帮我们创建一个没有参数的构造函数,public function __construct(){},如果我们重写了构造函数,那么我们自定义的构造函数就会覆盖系统默认的构造函数。
  • 如果我们自定义的构造函数里有行参,那么当我们创建对象的时候就必须传入相应的实参。否则会报错。

示例:

class Test {

    public function __construct() {
        echo 'hello, world<br>';
    }
}

$testObj = new Test();


class One {

    public function __construct($param) {

        echo $param;
    }
}

$oneObj = new One('hello, world<br>');

输出结果:

hello, world
hello, world

析构方法

  • 当一个对象没有被任何变量引用时就会自动销毁,并在被销毁前自动调用析构函数,无论程序有没有结束,只要一个对象没有被任何变量引用就会被销毁。
  • 当PHP程序运行结束后,所有的对象都会被销毁,对象在被销毁前,会自动调用析构函数。
  • 默认情况下,析构函数销毁对象的顺序和创建对象的顺序正好相反。最先创建的对象最后被销毁,强调默认情况下是因为,我们可以手动销毁对象,这样的话对象销毁的顺序就和默认情况不一样了,当PHP程序执行完后,那时候销毁对象的方法就是采用的默认方法。
  • 如果我们定义的一个类里专门有个属性是用来连接数据库的,当我们创建了该类的实例对象,并且用该成员属性连接数据库后,如果该类型的实例对象占用资源较大,我们往往会在使用后就立即销毁,虽然该对象能被销毁,但是该对象的成员属性所连接的资源却不会被自动销毁,需要我们自己手动销毁,这时,我们可以在析构函数里添加一句关闭数据库连接的语句就好了(mysql_close(要关闭的资源))。

示例:

class Test {

    public function __construct() {
        echo 'hello, world<br>';
    }

    public function __destruct()
    {
        echo '执行一些回收资源的操作<br>';
    }
}

$testObj = new Test();

输出结果:

hello, world
执行一些回收资源的操作

垃圾回收机制

  • 在PHP中,当一个对象没有任何引用指向它的时候,就会成为一个垃圾对象,PHP将启用垃圾回收器将对象销毁。
  • 在PHP程序退出前,PHP也将启用垃圾回收器,销毁对象。

访问修饰符

  • public

    如果没有为方法指定访问修饰符,它将是public。公有的属性或方法可以在类的内部或外部进行访问。

  • protected

    如果一个属性或方法指定访问修饰符为protected,那么被标记的属性或方法只能在类内部访问,被修饰的属性和方法能被子类继承。

  • private

    如果一个属性或方法指定访问修饰符为private,那么被标记的属性或方法只能在类内部访问,私有的属性和方法将不会被继承。

魔术方法

  1. 魔术方法都是在满足某个条件时,由系统自动调用。

  2. 魔术方法的名字,都是以两个下划线(__)开头的,因此我们在自定义函数时,函数名不要以两个下划线开头。

  3. 一些常用的魔术方法

    __construct():
     构造方法
    __destruct():
     析构方法
    __set():
     在给不可访问属性赋值(比如:protected/private/不存在)时,__set()会被调用。
    __get():
     读取不可访问属性的值(比如:protected/private/不存在)时,__get()会被调用。
    __isset():
     当对不可访问属性(比如:protected/private/不存在)调用isset()或empty()时,__isset()会被调用。
    __unset():
     当对不可访问属性(比如:protected/private/不存在)调用unset()时,__unset()会被调用。
    __toString():
     当我们把一个对象当做字符串输出时,就会自动调用__stoString()方法。
    __clone():
     如果定义了__clone方法,则新创建的对象clone(复制生成的对象)中的__clone()会被调用。用法如下:
     $copy_of_object = clone $object;
     克隆后的对象与原对象的地址不一样。
     当对象被复制后,PHP 5 会对对象的所有属性执行一个浅复制(shallow copy)。所有的引用属性 仍然会是一个指向原来的变量的引用。
     如果想防止其他程序员克隆某个对象,可以重写__clone()方法并把访问修饰符设置为private。
    __call():
     在对象中调用一个不可访问(比如函数访问修饰符为protected/private/不存在)方法时,__call()会被调用。
    __callStatic():
     用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。

对象比较

当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等。

而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。

示例:

class Test {

    public $name = 'itbsl';
    public $age  = 25;
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PHP变量、数据类型、字符串、运算.. 下一篇php 获取URL 各部分参数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目