【问题标题】:create object of the same class that passed object in php创建与在 php 中传递对象相同的类的对象
【发布时间】:2015-02-16 19:23:06
【问题描述】:

我有闲暇情况

class A {
   ... 
   public static function Copy($obj) {
      $newObj = new (class of $obj);
      ...
   }
}

class B extends A {
...
}

class C extends A {
...
}
...
$newB = B::Copy($BObject);
$newC = C::Copy($CObject);

我可以创建参数类的新对象,还是必须为每个继承的类重写方法?

【问题讨论】:

    标签: php class oop object


    【解决方案1】:

    也许可以简化它,但get_class() 是要走的路:

    $class  = get_class($obj);
    $newObj = new $class;
    

    我找不到适用于 PHP 5.x 或 7.x 的单行代码,但这似乎适用于 PHP 8.0:

    $newObj = new (get_class($obj));
    

    【讨论】:

      【解决方案2】:

      我认为这样的事情应该适合你:

      (这里我使用get_called_class() 来获取调用方法的类名)

      <?php
      
          class A {
      
              public static function Copy() {
                  $class = get_called_class();
                  return $newObj = new $class;      
              }
      
          }
      
          class B extends A {
      
          }
      
          class C extends A {
      
          }
      
          $newB = B::Copy();
          print_r($newB);
          $newC = C::Copy();
          print_r($newC);
      
      ?>
      

      输出:

      B Object ( )
      C Object ( )
      

      【讨论】:

      • 可能是因为我的 php 版本或配置,它运行致命错误:/
      • @user3125758 不,我的错。忘记复制正确的代码
      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多