PHP的构造函数,析构函数,(静态)变量,方法

本文详细介绍了PHP中类的定义、构造与析构函数、方法的实现及调用过程,并通过示例展示了如何创建父类与子类,以及子类如何继承父类的属性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.php的类的结构以及调用与java的方法很是不同;

2.php使用->调用方法和变量的,用::调用静态方法和变量;

3.php不仅有一个构造函数,还有有一个析构函数。子类的这两种函数可被parent::来进行调用保留。


一、父类 myClass.php

<?php

header("Content-type:text/html;charset=utf-8");

class myClass
{
    public $n = "这是public对象";
    private $n2 = "这是private对象";
    protected $n3 = "这是protected对象";

    private $myCt01;
    private $myCt02;
    private $myCt03;

    static public $m = "我是静态变量";

    //构造函数一个参数
//    public function __construct($myCt01)
//    {
//        $this->myCt01 = $myCt01;
//    }
    //构造函数,是程序开始时就执行。
    public function __construct($myCt01, $myCt02, $myCt03)
    {
        $this->myCt01 = $myCt01;
        $this->myCt02 = $myCt02;
        $this->myCt03 = $myCt03;
    }

//析构函数,程序结束时执行
    public function __destruct()
    {
        // TODO: Implement __destruct() method.
        echo "我是析构函数";
    }

//打印值
    public function printMyCt01()
    {
        echo $this->myCt01;
        echo $this->myCt02;
        echo $this->myCt03;
    }

    //无参数,无返回值
    public function getMyClass()
    {
        echo "这是我的类getMyClass()方法" . "<br>";
        echo $this->n2;
        echo $this->n3;
    }

    //具有返回值,无参数
    public function getMyNum()
    {
        return "我是返回值";
    }

    //有参数有返回值
    public function getMyName($n)
    {
        $n = $n . "大海" . "<br>";
        return $n;
    }

    //有参数,参数具有初始化,如果被传入则用传入的,没传入则不用;无返回值
    public function getAction($a, $b, $c = "我是初始化")
    {
        echo $a . "<br>";
        echo $b . "<br>";
        echo $c . "<br>";
    }

    //静态方法
    static public function getSc()
    {
        echo "我是静态方法" . "<br>";
    }
}


////构造参数,必须传参
//$myCs = new myClass("汪洋大盗", "汪洋大盗", "汪洋大盗");
//$myCs->printMyCt01();
//$myCs->getMyClass();
//echo $myCs->n;

////具有返回值,无参数
//echo "<br>" . $myCs->getMyNum();
//注意下边的输出方式
//$r = $myCs->getMyNum();
//echo $r;

////有参数有返回值
//echo $myCs->getMyName("汪洋");

////有参数,参数具有初始化
//$myCs->getAction("123", "456");
//$myCs->getAction("123", "456", "789");

//静态的情况下
////静态方法
//myClass::getSc();
//$myCs->getSc();

////静态变量
//echo myClass::$m;
?>


三、子类文件myChild.php

<?php
/**
 * Created by PhpStorm.
 * User: 洋   汪
 * Date: 2016/7/16
 * Time: 17:59
 */
header("Content-type:text/html;charset=utf-8");
include "myClass.php";

class myChild extends myClass
{

    public function __construct()
    {

//        parent::__construct("", $myCt02, $myCt03);
//可以保留父类的构造函数,也可以不保留。
        echo "我是儿子的构造函数" . "<br>";
    }

    public function __destruct()
    {
        echo "我是儿子的析构函数" . "<br>";
//        parent::__destruct();
    }
}

//只能得到父类的public的方法,变量;静态方法,静态变量。
$mc = new myChild();
echo $mc::getSc();
echo $mc::$m;
?>






### C++ 静态变量是否会调用析构函数 在 C++ 中,静态变量的生命周期通常与程序的运行周期一致,其析构函数会在程序终止时自动调用静态变量析构函数调用机制遵循对象生命周期管理的基本规则,即在对象生命周期结束时会自动调用析构函数[^2]。 对于静态成员变量,其析构函数调用发生在程序退出时,而不是在类的实例析构时。这是因为静态成员变量属于类本身,而不是类的某个特定实例。因此,当程序结束时,静态变量析构函数会被调用,以释放其占用的资源[^1]。 以下是一个简单的示例: ```cpp #include <iostream> class MyClass { public: MyClass() { std::cout << "Constructor called" << std::endl; } ~MyClass() { std::cout << "Destructor called" << std::endl; } }; class StaticExample { public: static MyClass staticObj; }; MyClass StaticExample::staticObj; // 静态成员变量的定义 int main() { std::cout << "Program ends when this line is executed." << std::endl; return 0; } ``` 输出结果为: ``` Constructor called Program ends when this line is executed. Destructor called ``` 从输出可以看出,`staticObj` 的构造函数在程序开始时被调用,而析构函数则在 `main` 函数结束、程序终止时被调用[^2]。 需要注意的是,静态变量的析构顺序与它们的构造顺序相反。如果多个静态变量之间存在依赖关系,则需要特别注意其构造和析构的顺序,以避免未定义行为。 ### 相关问题 1. 静态变量的析构顺序是否会影响程序的正常运行? 2. 如何在 C++ 中管理多个静态变量之间的依赖关系? 3. 静态变量的生命周期是否与全局变量一致? 4. 静态成员变量析构函数是否可以在类的析构函数中手动调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值