【问题标题】:php constructor vs callbackphp构造函数与回调
【发布时间】:2013-05-28 05:05:37
【问题描述】:

我目前正在深入研究 php 类/构造函数的基础知识。 我了解构造函数的工作原理,但不了解为什么要使用它。 例如,当我有这样的构造函数时:

function __construct($arg1, $arg2){
    $this->name  = $arg1;
    $this->speed = $arg2;
}

为什么我应该使用 __constructor 而不是像这样的简单回调:

function foo($arg1,$arg2){

    $this->name  = $arg1;
    $this->speed = $arg2;
}

谢谢

【问题讨论】:

  • 因为构造函数初始化类对象,默认在类的新对象创建时调用
  • $class=new cls('1','2')$class=new cls(); $class->foo('1','2') 快​​。
  • 所以它只是一个性能的东西? bc 通过这样做,我可以达到相同的结果

标签: php class constructor callback


【解决方案1】:
  1. 在做

    $obj = new Class($var1, $var2);
    

    $obj = new Class($var1, $var2);
    $obj->foo($var1, $var2);
    

    有相同的结果

  2. 通过强制将值传递给构造函数,类可以定义它应该具有的强制值,以便构造一个类。与后一种情况一样,可以忽略 foo。

  3. 有一个方法来初始化意味着,一个最终有不同的方法名称,foo,init等,构造函数避免了这个

【讨论】:

    【解决方案2】:

    构造函数总是在对象实例化时调用,并且是一种已知模式。

    您的第二个示例不是(如果它打算执行与构造函数类似的初始化角色)。

    【讨论】:

      【解决方案3】:
      <?php 
      class abc {
          function __construct($arg1, $arg2){
              echo $arg1.' '.arg2;
          }
      }
      $obj = new abc('manish','jangir');
      ?>
      

      创建对象时会自动打印“manish jangir”

      【讨论】:

        【解决方案4】:

        主要目的是保持代码干净。通过将初始化放在构造函数中,您可以确保要在其他函数中使用的变量将处于有效状态,例如:

        class Foo{
            private $number;
        
            public function setNumber($number) {
                $this->number = $number;
            }
        
            public function getNumber() {
                if ($this->number=== null) {
                    throw new RuntimeException("The Number is Null !");
                }
                return number;
            }
        }
        

        这是带有构造函数的类

        class Foo{
            private $number;
        
            public function __construct($number) {
                $this->number = $number;
            }
        
            public function getNumber() {
                if ($this->number=== null) {
                    throw new RuntimeException("The Number is Null !");
                }
                return number;
            }
        }
        

        使用构造函数可以确保数字将被初始化。我希望我的回答足够清楚,但是如果您对我的回答还有其他问题,请随时在评论中提问:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-29
          • 1970-01-01
          • 2013-10-03
          • 2011-08-20
          • 2010-12-15
          • 1970-01-01
          • 2018-11-29
          • 2011-03-06
          相关资源
          最近更新 更多