PHP 面向对象编程 - 构造方法和析构方法

1. 构造方法;

  • 构造方法是 PHP5 中出现的一个新的特性,在实例化对象的时候自动调用。
  • 在实例化的时候可以给类进行一些赋初始值的操作。
# 构造方法语法格式

[修饰符] function __construct([参数]){
		程序体
 }

# 构造的方法的名字是固定的
# 构造方法也是魔术方法的一种
# 在实例化时候传递的参数,会在构造方法里被接收到。

# 之前写过一个 person 类。在现实生活中,每个人都要有名字、年龄、性别。
# 如果在声明类的时候,就把这几个成员属性赋了初始值,
# 那么实例化对象的几个成员属性都是相同的值,所有的人都是相同的名字、年龄、性别。这样是不符合需求的。
# 所以这里就要用到构造方法,去给每一个成员属性在每一次实例化的时候,赋一个自己特有的值。

构造方法实例:person.class.php

<?php
class person{
    
    public $name;
    public $age;
    public $gender;

    /**
     * 构造方法 __construct() 是在实例化对象时被自动调用
     * 用途:可以用于初始化程序(可以给成员属性赋值,也可以调用成员方法)
     * 语法:[修饰符] function __construct(参数列表...){ 初始化流程 }
     */
    public function __construct($n, $a, $g = '男'){
        $this -> name = $n;
        $this -> age = $a;
        $this -> gender = $g;
        $this -> say();
    }

    public function say(){
        echo "我的名字是:{$this -> name},";
        echo "我的年龄是:{$this -> age},";
        echo "我的性别是:{$this -> gender}。";
    }
}

// 实例化对象时要按构造方法的参数去传对应的值,必传参数要放在可选参数之前
$person1 = new person("张三", 18);

echo $person1 -> name;
echo "<br />";
echo $person1 -> age;
echo "<br />";
echo $person1 -> gender;
echo "<br />";
$person1 -> say();
echo "<hr />";
$person2 = new person("李四", 30, "女");
echo $person2 -> name;
echo "<br />";
echo $person2 -> age;
echo "<br />";
echo $person2 -> gender;
echo "<br />";
$person2 -> say();
echo "<hr />";
$person3 = new person("王五", 20, "男");
echo $person3 -> name;
echo "<br />";
echo $person3 -> age;
echo "<br />";
echo $person3 -> gender;
echo "<br />";
$person3 -> say();

2. 析构方法。

  • 与构造方法相对应的就是析构方法,析构方法是在对象被销毁时,被自动调用的一个方法。
  • 用途很多,可以进行一些资源操作中的释放资源、以及文件操作中的关闭文件。或者说如果有一些用户信息,你想在最后保存一下,如果你想让用户去点一些保存的按钮,可能用户不会去操作。那我们就可以用析构方法,把这些保存的流程写到析构方法中。
# 析构方法方法格式

[修饰符] function __destruct([参数]){
		程序体
 } 
 

析构方法实例:person.class.php

<?php
class person{
    
    public $name;
    public $age;
    public $gender;
    
	// 注意:成员属性 $name 和 构造方法形参 $name 是不同的
    public function __construct($name, $age, $gender){
        $this -> name = $name;
        $this -> age = $age;
        $this -> gender = $gender;
    }

    public function say(){
        echo "say";
    }

    /**
     * 析构方法 __destruct() 是在对象被销毁时自动调用
     * 用途:可以进行资源的释放操作或文件的关闭操作或信息保存操作
     * 注意:栈内存的先进后出
     */
    public function __destruct(){
        echo "88{$this -> name}<br />";
    }
}

$person = new person("zhangsan", 18, 'female');
$person -> say();
echo "<hr />";
$person1 = new person("lisi", 20, "male");
$person1 -> say();

# 输出

say
--------------------
say88lisi
88zhangsan

# 原理解释
# 和内存操作(出栈,入栈)有关。它是一种“栈内存”的操作,先进后出。
# 析构方法是在对象销毁的时候执行。是在什么时候销毁对象?是在**脚本执行完**才会销毁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值