析构函数

void __destruct( void )

析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

<?php
class A {
   public function __construct() {
       echo 'Start...';
   } 

   public function sayHi()
   {
       echo "Hi...";    
   }

   public function __destruct() {
       echo "Finish";
   }
}

(new A())->sayHi(); // Start...Hi...Finish

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中 调用 exit() 将会中止其余关闭操作的运行。

访问控制

对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。如果未添加,则默认为 public。

  • public 所定义的类成员可以在任何地方被访问
  • protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问)
  • private 定义的类成员则只能被其所在类访问
<?php

class A
{
    private $hi = 'Hi'.PHP_EOL;
    protected $hello = 'Hello'.PHP_EOL;
    public $bye = 'Bye'.PHP_EOL;

    private function sayHi()
    {
        echo $this->hi;
    }

    protected function sayHello()
    {
        echo $this->hello;
    }

    public function sayBye()
    {
        echo $this->bye;
    }

}

class B extends A
{
    public function talk()
    {
        parent::sayHello();
    }
}

$a = new A();
$a->sayHi();//报错,无法调用


$b = new B();
$b->sayHello();//报错,无法调用
$b->talk();
$b->sayBye();

结果输出

PHP Fatal error:  Uncaught Error: Call to private method A::sayHi() from context '' in /home/*.php:35
Stack trace:
#0 {main}
  thrown in /home/*.php on line 35

从结果可知,声明为 private 的方法或属性无法在类外部调用,同时子类也无法调用该方法。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。