PHP- 复合数据类型-对象的特殊方法和属性

2023-04-26 00:05:24 浏览数 (1)

__construct() 方法:这个方法是在对象创建时自动调用的,用来初始化对象的属性。如果你没有显式地定义这个方法,PHP 会自动创建一个空的 __construct() 方法。

代码语言:javascript复制
class Person {
  public $name;
  protected $age;

  function __construct($name, $age) {
    $this->name = $name;
    $this->age = $age;
  }
}

$person = new Person("Tom", 25);
echo $person->name . "<br>"; // 输出:Tom
echo $person->age . "<br>"; // 报错,受保护属性不可以在外部访问

__destruct() 方法:这个方法是在对象被销毁时自动调用的,用来清理对象的资源。如果你没有显式地定义这个方法,PHP 会自动创建一个空的 __destruct() 方法。

代码语言:javascript复制
class Person {
  public $name;
  protected $age;

  function __construct($name, $age) {
    $this->name = $name;
    $this->age = $age;
  }

  function __destruct() {
    echo "Object destroyed.";
  }
}

$person = new Person("Tom", 25);
// 输出:Object destroyed.

__get() 方法:这个方法是在访问一个不存在或不可访问的属性时自动调用的,用来返回一个默认值或触发一个错误。它接受一个参数,表示被访问的属性的名称。

代码语言:javascript复制
class Person {
  public $name;
  protected $age;

  function __construct($name, $age) {
    $this->name = $name;
    $this->age = $age;
  }

  function __get($prop) {
    echo "Property $prop not found.";
  }
}

$person = new Person("Tom", 25);
echo $person->name . "<br>"; // 输出:Tom
echo $person->age . "<br>"; // 输出:Property age not found.

__set() 方法:这个方法是在尝试给一个不存在或不可访问的属性赋值时自动调用的,用来设置一个默认值或触发一个错误。它接受两个参数,第一个参数表示被赋值的属性的名称,第二个参数表示要赋的值。

代码语言:javascript复制
class Person {
  public $name;
  protected $age;

  function __construct($name, $age) {
    $this->name = $name;
    $this->age = $age;
  }

  function __set($prop, $value) {
    echo "Cannot set property $prop.";
  }
}

$person = new Person("Tom", 25);
$person->name = "Jerry"; // 输出:Jerry
$person->age = 30; // 输出:Cannot set property age.
php

0 人点赞