【面向初学者】关于 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