【面向初学者】关于 PHP 构造函数

大家好!
我是系统开发部的松木。
今天,我想详细了解一下构造函数,这是面向对象编程语言的一个特性。

什么是构造函数?

构造函数是类实例化(创建为对象)时总是会执行的方法。普通方法可以在类实例化后的任何时间使用箭头运算符调用,但构造函数在类实例化时会自动调用,因此无需手动调用。

・常规方法

$object = new classname; $object->methodname();

・构造函数方法

$object = new className;

如何编写构造函数

构造函数方法编写如下:

public function __construct() { // 处理内容 }

开头写着“public”,这是一个访问修饰符。

有三种访问修饰符:public、protected 和 private。如果不使用 public,当从外部调用类时,构造函数方法不会被调用,因此通常应该使用 public 访问修饰符。

此外,方法名前带有两个下划线“__”的方法称为魔术方法。魔术方法是指在特殊情况下调用的方法,除了构造函数之外,还有“__get”和“__set”。我有点跑题了,但构造函数可以像上面那样编写和使用。

使用示例

现在让我们实际操作一下,感受一下。首先,创建一个类。在这个例子中,我们将创建一个 Human 类。

class Human { private $name; private $age; private $from; public function __construct( $name, $age, $from = 'Japan' ) { $this->name = $name; $this->age = $age; $this->from = $from; } }

由于我们创建的是人类类,因此我们已将“姓名”、“年龄”和“籍贯”作为必要的属性(变量)准备就绪。调用此类时,必须在创建实例时将构造函数参数中指定的数字作为参数输入。

$human = new Human('taro', 32);

通过上述编写方式,我们能够将必要的值传递给构造函数并实例化 Human 类。$human 包含 Human 类。

这里就出现了一个问题。

“为什么构造函数需要三个参数,而实例化时只指定了两个参数,却仍然可以创建一个对象?”

这是我的问题。

仔细查看构造函数的内容,你会发现第三个参数 `$from` 被赋值为 `Japan`。这样一来,构造函数和 PHP 方法通常允许你设置一个初始值,以便在没有接收到任何值时使用。如果接收到值,则会使用该值,而不会调用初始值设置。

其次,为什么要指定私有变量呢?这是因为它们不能被直接从外部修改。这种编写方式称为封装

那么,直接从外部进行改变有什么问题呢?

例如,如果您只想在年龄变量 $age 中设置 200 以内的值,但允许直接修改,那么也可以设置 201 及以上的值。因此,我们使用封装,并在将值赋给变量之前始终使用方法等手段来检查该值是否无效。

在这种情况下,我们准备了一个设置方法,并在该方法中编写了判断表达式。
通过在构造函数中调用此设置方法,当实例化 Human 类时,会调用 setAge() 方法,从而限制 $age 中输入的值。

在下面的示例中,如果收到 201 或更高的值,则强制输入值 200。

class Human { private $name; private $age; private $from; public function __construct( $name, $age, $from = 'Japan' ) { $this->name = $name; $this->setAge($age); $this->from = $from; } public function setAge($age) { if ($age <= 200) { $this->age = $age; } else { $this->age = 200; } }

・使用构造函数的优势

通过在构造函数中初始化变量,新创建的实例的变量始终具有指定的值。此函数允许每个对象的变量都具有值。

概括

你觉得怎么样?

这次我们重点学习了构造函数,但面向对象编程还有很多东西需要学习,所以让我们继续学习吧!

今天的博客就到这里。
感谢您阅读到最后。

如果您觉得这篇文章有用,请点击【点赞】!
20
加载中...
20票,平均分:1.00/120
12,669
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

松木

我喜欢扑克和橄榄球。
我最喜欢的漫威角色是“绿巨人”。

我的座右铭是:专注力 x 时间 + 运气