代码之家  ›  专栏  ›  技术社区  ›  Craig

PHP语法:从成员变量构造类

  •  0
  • Craig  · 技术社区  · 16 年前

    我正试图从这样的成员变量生成一个类:

    <?
    class A{
        private $to_construct = 'B'; 
        function make_class(){
            // code to make class goes here
        }
    
    }
    
    class B{
        function __construct(){
            echo 'class constructed';
        }
    }
    
    $myA = new A();
    $myA->make_class();
    ?>
    

    我尝试使用:

     $myClass = new $this->to_construct();
    

    $myClass = new {$this->to_construct}();
    

    但两者都不起作用。我最终不得不这样做:

    $constructor = $this->to_construct;
    $myClass = new $constructor(); 
    

    似乎有一种方法可以做到这一点,而不用将类名存储在局部变量中。我错过什么了吗?

    3 回复  |  直到 12 年前
        1
  •  3
  •   jkeys    16 年前

    你试过这个吗?

     $myClass = new $this->to_construct;
    
        2
  •  2
  •   Taryn Frank Pearson    12 年前

    您使用的是php 4还是什么?5.2.9 $myClass = new $this->to_construct(); 工作得很好。

    最后,它是您必须使用的,使用PHP。PHP语法和语义非常不一致。例如,对调用结果的数组访问是一个语法错误:

    function foo() {
      return array("foo","bar");
    }
    echo $foo()[0];
    

    任何其他语言都可以这样做,但PHP不能这样做。有时只需要将值存储到局部变量中。

    同样适用于 func_get_args() 在旧版本的PHP中。如果您想将它传递给一个函数,那么首先需要将它存储在本地var中。

        3
  •  0
  •   damko    16 年前

    如果我在字里行间读得好的话,你就是想做这种事。对吗?

    class createObject{
        function __construct($class){
            $this->$class=new $class;
        }
    
    }
    
    class B{
        function __construct(){
            echo 'class B constructed<br>';
        }
        function sayHi(){
            echo 'Hi I am class: '.get_class();
        }
    }
    
    class C{
        function __construct(){
            echo 'class C constructed<br>';
        }
        function sayHi(){
            echo 'Hi I am class: '.get_class();
        }
    }
    $wantedClass='B';
    $finalObject = new createObject($wantedClass);
    $finalObject->$wantedClass->sayHi();
    

    ——
    水坝