2011-01-05 52 views
4

劃分一類,我試圖創建一個類TestClass即超過幾個文件分割。我已經在3個文件,其中第一個文件TestClassPart1.php有類class TestClass {的開始和TestClassPart3.php具有類的右括號的最後一個文件拆分它。這是3個文件爲什麼我不能在多個文件中

//TestClassPart1.php 
<?php 
class TestClass {  
    public function func1(){ 
     echo "func 1"; 
    } 

//TestClassPart2.php 
<?php  
    public function func2(){ echo "func 2"; } 

//TestClassPart3.php 
<?php  
    public function func3(){ echo "func 3"; } 

} 

我然後叫TestClass.php實際的類文件,所以重組是TestClass.php剛纔的所有3個文件的膠水。

<?php 
require 'TestClassPart1.php'; 
require 'TestClassPart2.php'; 
require 'TestClassPart3.php'; 

我想這應該工作,但是當我嘗試創建的TestClass的實例並調用的功能之一,我得到parse error, expecting T_FUNCTION' in C:\wamp\www\TestClassPart1.php on line 5。 5號線是func1()

<?php 
require 'TestClass.php'; 
$nc = new TestClass(); 
$nc->func1(); 

不應該在該工作}?我以爲你可以通過幾個文件傳播一個類沒有問題。我做錯了嗎?

+7

你爲什麼要這麼做?如果這個類很大,在單個文件中不可管理,那麼重構或分解成較小的類可能已經成熟。 – 2011-01-05 17:34:07

+1

對於標記類(如果您使用phpdoc或同等方法)和待辦事項不是「快速解決方案」,然後在您有時間/機會時再回到它上面?即:保持原樣,而不是提供解決問題的錯覺。 – 2011-01-05 17:42:51

回答

8

當你require文件,PHP將分析和評估的內容。

你類是不完整的,所以PHP解析

class TestClass {  
    public function func1(){ 
     echo "func 1"; 
    } 

時,它無法使課堂的意義,因爲收盤}丟失。

這麼簡單。


並預測您的下一個問題。這

class Foo 
{ 
    include 'methods.php' 
} 

也不會工作。


PHP Manual on OOP 4(不可能發現它在5)

你不能將一個類定義成多個文件。除非中斷在方法聲明中,否則也不能將類定義分解爲多個PHP塊。以下將不起作用:

<?php 
class test { 
?> 
<?php 
    function test() { 
     print 'OK'; 
    } 
} 
?> 

但是,下面是可以的:

<?php 
class test { 
    function test() { 
     ?> 
     <?php 
     print 'OK'; 
    } 
} 
?> 

如果您正在尋找Horizontal Reuse, either wait for PHP.next, which will include Traits或看看

+0

特徵在php5.4中:http://uk3.php.net/trait – Redzarf 2014-08-25 13:48:38

0

如果必須做這種方式,您可以使用include_once()直接推一個文件到您的腳本。

+1

不完全。 PHP必須良好執行。在這種情況下,PHP將失效,因爲右括號將會丟失。 – zzzzBov 2011-01-05 17:37:09

+0

@zzzzBov,所以任何希望使這種事情工作? – park 2011-01-05 17:39:24

+1

我在想那些只是錯誤的代碼行。這些文件實際上是這樣構成的?哎喲。我只想重新考慮我是如何編碼的,因爲我認爲這樣做沒用。 – Blender 2011-01-05 17:39:26

2

我曾經有過這種同樣的想法,因爲純粹的學術興趣。雖然您可以使用PHP來生成PHP,然後通過服務器進行評估,但這並不是直接可以做到的。

長話短說:

不要打擾

短篇小說長:

  • 它增加了不安全的水平,你的分級系統,因爲它變得更難控制文件訪問。
  • 它會減慢頁面的編輯/緩存
  • 您確實不需要強制將一個方形栓插入圓孔。

相反:使用分離功能集成到類和擴展現有類的適當OOP的做法。

相關問題