PHP面向对象1.3对象中成员的访问和构造析构函数

1.1 对象中成员的访问

对成员属性的访问包括赋值操作和获取成员属性的操作。访问对象中的成员和访问数组中的元素类似。只能通过对象的引用来访问对象中的每个成员。
    $引用名 = new 类名称([参数数列表]); //对象实例化格式
    $引用名 -> 成员属性 = 值;  //对成员属性赋值的操作
    $echo $引用名 -> 成员属性; //获取成员属性的值
    $引用名 -> 成员方法; //访问对象中的成员方法

如果对象中的成员不是静态的那么,“对象引用名->属性”或“对象引用名->方法”是唯一的访问形式。

1.2 特殊的对象引用”$this”

不管是在对象的外部还是在对象的内部,访问对象中的成员都必须使用对象的引用变量。但对象创建完成以后,对象的引用名称无法在对象的方法中找到。如果在对象的方法中再使用new关键字创建一个对象则是另一个对象,调用的成员也是另一个新创建对象的成员。
对象一旦被创建,在对象中的每个成员方法里面都会存在一个特殊的对象引用“ this this引用就代表哪个对象,专门用来完成对象内部成员之间的访问。
不管是在对象内部使用$this访问自己对象内部的成员,还是在对象外部通过对象的引用名称访问对象中的成员。都需要使用特殊的运算符”->”

class Person{
    var $name;
    var $sex;
    var $age;
    function say(){
        echo "我的名字:".$this->name." 性别:".$this->sex." 年龄".$this->age;
    }
    function run(){
        echo $this->name."在走路<br>";
    }
}

1.3 构造方法与析构方法

构造方法 __construct() (两个下划线)

      对象创建完成后第一个被对象自动调用的方法,一般完成一些初始化工作,类中默认会存在一个没有参数列表并且内容为空的构造方法。如果显式地声明,则将会用自定义的构造方法。
       每次使用new来实例化对象都会自动调用构造方法。不能主动通过对象的引用来调用构造方法。
       PHP5之前构造方法的名称必须与类名相同。为了向下兼容,如果一个类中没有名为__construct的构造方法,则会自动搜索与类名相同的构造方法。

function __construct([参数列表]){ //构造方法名称是以两个下划线开始
    //方法体,一般对成员属性初始化赋值
}

析构方法 __destruct() (两个下划线)

      PHP将在对象被销毁前自动调用这个方法。析构方法允许在销毁一个对象之前执行一些特定的操作。例如关闭文件,释放结果集。
       当对内存段中的对象失去访问它的引用时,它就不能被访问,也就成为垃圾对象。通常对象的引用被赋予其他的值或者在页面运行结束时,对象就会事情引用。PHP有一种垃圾回收机制,当对象不能被访问时就会自动启动垃圾回收程序。回收对象在内存中的占用空间。而析构方法正是在垃圾回收程序回收对象之前调用的。
      析构函数不能带有任何参数

function __destruct(){  //同样是以两个下划线开头
    //方法体,通常完成一些在对象销毁前的清理任务
}

例如

        class Person{
        var $name;
        var $sex;
        var $age;
        //构造方法,一般完成初始化工作
        function __construct($name,$sex,$age){
            $this->name = $name;
            $this->sex = $sex;
            $this->age = $age;
        }
        function say(){
        echo "我的名字是:".$this->name;
        }

        //析构方法,一般完成对象销毁前的操作
        function __destruct(){
        echo "bye:".$this->name."<br/>";
        }
        }

        $person1 = new Person("张三","男",20);
        $person1 = null;
        $person2 = new Person("王五","男",21);
        $person3 = new Person("赵六","男",18);

        结果会是:
        bye: 张三
        bye: 赵六
        bye: 王五

第一个对象由于 赋为空值,因此最先失去引用,不能被访问,自动调用析构方法,输出”bye:张三”.后面声明的两个对象都是在页面执行结束失去的引用,由于对象的引用都是存放在栈内存中的,根据其先进先出的特点,最后创建的对象引用会被最先释放,因此形成了这种情况。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值