2012-02-13 132 views
3

我试过这个,当我尝试在类“second”中实例化类“第一个”时出现错误。类可以实例化另一个类吗? (PHP)

类“second”中的注释部分会导致错误。

class first { 
    public $a; 

    function __construct() { 
     $this->a = 'a'; 
    } 
} 

class second { 
    //$fst = new first(); 
    //public showfirst() { 
     //$firsta = $this->first->a; 
    // echo "Here is first \$a: " . $firsta; 
    //} 
} 

编辑:

这导致即使所有我在课堂上“第二”是类的实例化“第一”服务器错误。

class second { 
    $fst = new first(); 
    //public showfirsta() { 
    // $firsta = $this->fst->a; 
    // echo "Here is first \$a: " . $firsta; 
    //} 
} 
+0

那'$ fst'似乎已经唤出无章可循。 – BoltClock 2012-02-13 06:24:05

+0

是的,是吗?我不能创建一个$ fst,它是第一个类的新实例吗?这就是我想要做的。 – 2012-02-13 06:25:41

+0

在实例化另一个类时没有问题,你只需要用正确的变量来引用它,尽管...'$ firsta = $ fst-> a' for ex。 first()的对象被分配给$ fst,而不是$ this-> first – 2012-02-13 06:26:09

回答

8

试试这个:

class First { 
    public $a; 

    public function __construct() { 
     $this->a = 'a'; 
    } 

    public function getA() { 
     return $this->a; 
    } 
} 

    class Second { 
     protected $fst; 
     public function __construct() { 
      $this->fst = new First(); 
     } 

     public function showfirst() { 
      $firsta = $this->fst->getA(); 
      echo "Here is first {$firsta}"; 
     } 
    } 

    $test = new Second(); 
    $test->showfirst(); 
+0

这工作得很好!但是,为什么你要把echo $语句中的$ firsta放在{}里? – 2012-02-13 06:45:13

+0

您可以使用它们来插入变量表达式。但在这种情况下,这也将工作,而不是ofcourse.http://stackoverflow.com/questions/2596837/curly-braces-in-string-in-php – busypeoples 2012-02-13 06:49:02

4

您可以在另一个类中实例化一个类。就你的情况而言,在你的两个例子中,你总是指向错误的变量。此外,您不能在财产申报指定一个类:

class second { 

    public $fst; 

    public function showfirsta() { 
    $this->fst = new first(); 
    $firsta = $this->fst->a; 
    echo "Here is first \$a: " . $firsta; 
    } 
} 
+0

似乎很奇怪,你不能立即初始化变量到一个实例另一类。但那确实解决了这个问题。而且,这个类实例将会与调用对象一起死掉,对吧? – 2012-02-13 06:38:57

+0

你是什么意思?无论如何,你总是可以返回实例:'return $ this-> fst'。如果将实例化放在构造函数中,那么只要实例化该类,就可以立即分配它;比你将$ this-> fst提供给整个班级 – 2012-02-13 06:47:25

7
$fst = new first(); 

不能声明实例化一个新的类功能之外的变量。默认值不可变。它必须是一个字符串,一个数字或一个数组。对象被禁止。

public showfirst() { 

你在那里忘了function这个词。

$firsta = $this->first->a; 

您没有声明类变量$first。您将其命名为$fst将其称为$this->fst

echo "Here is first \$a: " . $firsta; 
} 

你的目的(无论这些均可):

class second { 
    public function showfirst() { 
     $fst = new first(); 
     $firsta = $fst->a; 
     echo "Here is first \$a: " . $firsta; 
    } 
} 
+1

在你的例子中,只要函数执行完成,$ fst实例就会死掉,对吗?如果我需要$ fst来完成课程中的其他操作,我该怎么办?是的,你是正确的关于我的错误与“功能”关键字丢失和其他的东西。 – 2012-02-13 06:43:18

相关问题