2014-05-22 57 views
1

我有兩個php文件。我想從第二個文件的類中的第一個文件實例化一個類。基本上使幾個類和使用另一個文件來訪問他們的方法。我是PHP新手,我遇到了一些麻煩。我使用的文件很可能會位於同一個目錄中,但如果它們不存在,那麼這裏有任何問題。我希望有人能幫助我。php實例化在單獨的類

謝謝!

示例代碼看起來是這樣的:

文件路徑= somePath/someDirectory/aFolder/FooClass.php

<?php 
    class FooClass { 
     public function __construct() {} 
     public $Foo = "oof"; 
     public function getFoo() { 
      return $this->Foo; 
     } 
     public function setFoo ($Foo) { 
      $this->Foo = $Foo; 
     } 
    } 
?> 

文件路徑= anotherPath/anotherDirectory/anotherFolder/BarClass.php

<?php 
    require($lib . '/Library/WebServer/someDirectory/src/aFolder/FooClass.php'); 
    class BarClass { 
     public function __construct() {} 
     $f = new FooClass(); 
     public $Bar = "rab"; 
     public function getBar() { 
      return $this->Bar; 
     } 
     public function setBar ($Bar) { 
      $this->Bar = $Bar; 
     } 
    } 
    $b = new BarClass(); 
    echo $b->f->getFoo() . "<br>"; 
?> 
+1

什麼'我有一些麻煩'是什麼意思? – jeroen

+0

我沒有理解實例化類的正確方法,我無法像我期望的那樣訪問方法和實例變量。我來自java。 – demuro1

+0

您應該啓用錯誤顯示,因爲您的代碼會產生各種錯誤。把它放在主腳本的頂部:'ini_set('display_errors',1); error_reporting(E_ALL | E_STRICT);' – jeroen

回答

2

我可以看到的一個問題是,您正在使用表達式來定義您的$f屬性。你不能在PHP中做到這一點。根據手冊:

它們是通過使用public,protected或 private中的一個關鍵字定義的,後面是一個正常的變量聲明。這個聲明 可能包括一個初始化,但是這個初始化必須是一個 的常數值 - 也就是說,它必須能夠在編譯 的時間進行評估,並且必須不依賴於運行時信息才能被 評估。

你會需要這樣的東西:

class BarClass { 

    public $f; 

    public function __construct(){ 
     $this->f = new FooClass(); 
    } 

    ... 
} 
+0

這對我來說非常感謝 – demuro1

1

但如果文件不在相同的目錄中有任何問題

由於您使用絕對路徑,require

require($lib.'/Library/WebServer/someDirectory/src/aFolder/FooClass.php'); 

既然你只是用PHP開始,我會鼓勵你閱讀autoloading和看一看使用Composer將其中一個包含到您的代碼庫中。

+0

超級棒。我很欣賞這種迴應。我將立即查看鏈接。感謝您的建議! – demuro1

2

在你的代碼$f沒有access visibility集,所以它的默認設置爲private

要在class BarClass之外訪問它,您需要在__construct之外聲明它並將其設置爲public

class BarClass { 
    public $f; 
    public function __construct() { 
    $this->f = new FooClass(); 
    } 
} 
+0

這就是我最初的想法,但OP的構造函數實際上是空的。你的代碼確實解決了/ one問題:-) – jeroen

+0

@ jeroen oops!編輯答案以糾正錯誤。 – iblamefish

+0

感謝您的幫助 – demuro1