Php 实例化没有显式构造函数的类合法吗?

Php 实例化没有显式构造函数的类合法吗?,php,Php,我最近创建了两个代码示例来测试构造函数在php中的工作方式,一个带有显式构造函数,另一个没有。两个输出是相同的 实例化没有显式构造函数的类合法吗 带构造函数的代码 <?php class Circle { const PI = 3.14; public $radius; //Constructor method public function __construct($r) { $this->radius = $r;

我最近创建了两个代码示例来测试构造函数在php中的工作方式,一个带有显式构造函数,另一个没有。两个输出是相同的

实例化没有显式构造函数的类合法吗

带构造函数的代码

<?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允许开发人员为类声明构造函数方法。具有构造函数方法的类对每个新创建的对象调用此方法。