我最近创建了两个代码示例来测试构造函数在php中的工作方式,一个使用显式构造函数,另一个没有。两个输出都是一样的。
实例化没有显式构造函数的类是否合法?
带构造函数的代码
array (
0 =>
array (
'stdid' => '11',
'tid' =>
array (
0 => '1',
1 => '4',
2 => '5',
3 => '2',
4 => '3',
),
),
1 =>
array (
'stdid' => '12',
'tid' =>
array (
0 => '4',
1 => '5',
2 => '2',
3 => '3',
4 => '1',
),
),
)
---
array (
11 =>
array (
'tid' =>
array (
0 => '5',
1 => '2',
2 => '1',
3 => '3',
4 => '4',
),
),
12 =>
array (
'tid' =>
array (
0 => '2',
1 => '4',
2 => '1',
3 => '3',
4 => '5',
),
),
)
没有构造函数的代码
<?php
class Circle {
const PI = 3.14;
public $radius;
//Constructor method
public function __construct($r) {
$this->radius = $r;
}
public function calculate() {
return 2 * self::PI * $this->radius;
}
}
//Argument passed during instantiating
$C = new Circle(7);
echo ("Circumference of Circle: ".$C->calculate());
?>
答案 0 :(得分:3)
添加构造函数方法是可选的。 documentation州:
PHP 5 允许开发人员为类声明构造函数方法。具有构造函数方法的类在每个新创建的对象上调用此方法。
但请注意,您的第二个实施并不理想:
calculate
方法有副作用:它设置 radius 成员。这不是最佳实践:如果方法的主要目的是返回某个东西,那么它不应该改变该对象。
calculate
方法要求您在每次调用时提供半径。当对象知道其半径时,这不是你想要的。