Php 实例化没有显式构造函数的类合法吗?
我最近创建了两个代码示例来测试构造函数在php中的工作方式,一个带有显式构造函数,另一个没有。两个输出是相同的 实例化没有显式构造函数的类合法吗 带构造函数的代码Php 实例化没有显式构造函数的类合法吗?,php,Php,我最近创建了两个代码示例来测试构造函数在php中的工作方式,一个带有显式构造函数,另一个没有。两个输出是相同的 实例化没有显式构造函数的类合法吗 带构造函数的代码 <?php class Circle { const PI = 3.14; public $radius; //Constructor method public function __construct($r) { $this->radius = $r;
<?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());
?>
无构造函数的代码
<?php
class Circle {
const PI = 3.14;
public $radius;
//Non-ideal class mutation method
public function calculate($r) {
$this->radius = $r;
return 2 * self::PI * $this->radius;
}
}
$C = new Circle();
//Argument was passed directly to the method
echo ("Circumference of Circle: ".$C->calculate(7));
?>
添加构造函数方法是可选的。各国: PHP5允许开发者为类声明构造函数方法。具有构造函数方法的类对每个新创建的对象调用此方法 但是请注意,您的第二个实现并不理想:
方法有一个副作用:它设置半径成员。这不是最佳实践:如果一个方法的主要目的是返回一些东西,那么它不应该改变对象calculate
方法要求您在每次调用时提供半径。当对象应该知道其半径时,这并不是您真正想要的calculate
{}
图标。好的,很抱歉,我在问使用mobile Appabs,没有显式默认构造函数的类绝对没有问题,正如您所说,编译器通常会创建一个构造函数。拥有一个不需要的类是完全合法的,当然没有法律禁止它。在ctor中没有参数的可以被视为“逻辑引擎”,而有参数的可以被视为“具有属性的对象”,旁注:PHP有一个内置常量,因此您不需要自己定义它。这也意味着它是可选的:PHP5允许开发人员为类声明构造函数方法。具有构造函数方法的类对每个新创建的对象调用此方法。