2012-11-14 51 views
0

我試圖實例化一個使用名稱空間的類。名稱空間如何在PHP中工作

<?php 
namespace CFPropertyList; 

require_once('CFPropertyList/CFPropertyList.php'); 

$plist = new CFPropertyList(); 
?> 

這工作!

但是,當我嘗試將該代碼放入我的班級時,我得到語法錯誤。我不能使用「名稱空間CFPropertyList;」在班上?

<?php 
class Plist{ 
    public function test(){ 
     namespace CFPropertyList;  

     require_once('CFPropertyList/CFPropertyList.php'); 

     $plist = new CFPropertyList(); 
    } 

} 
?> 

UPDATE:

感謝所有我得到這個工作。

<?php 
namespace CFPropertyList; 
require_once('CFPropertyList/CFPropertyList.php'); 

class Plist{ 
    public function test(){ 
     //some code 
    } 
} 

} 

但是我自己的類在命名空間中嗎?對於noob問題抱歉。 我做不到。

$plist = new Plist; 
    $plist->test(); 

回答

2

你的命名空間應該將課前聲明,所以後來的類將屬於該命名空間:

plist.php

<?php 
    namespace CFPropertyList; 

    class Plist{ 
     public function test() { 
      echo 'Test'; 
     } 
    } 
?> 

other.php

<?php 
    require_once('plist.php'); 

    $plist = new CFPropertyList::Plist(); 
    $plist.test(); 
?> 
+0

這是工作,但現在我得到了一個新問題'$ plist = new Plist; $ plist->試驗();」。找不到類'Plist' – Toydor

+0

如果您從命名空間外部調用它,則需要CFPropertyList :: Plist – Fenton

1

您必須將名稱空間定義放在類定義之外。 (除此之外類定義似乎是相當搞砸了,你就沒有任何類的方法?)

+0

修復方法! =)但我不能把名稱空間放在類定義之外。 – Toydor

+1

這是唯一的方法。查看@ air4x的答案。 –

1

Defining namespaces

命名空間是使用namespace關鍵字聲明的。包含 命名空間的文件必須在 任何其他代碼之前聲明文件頂部的命名空間 - 有一個例外:declare關鍵字。

所以你必須在文件的頂部聲明它。

相關問題