2011-08-10 13 views
1

クラス内でラップせずにPHPで変数や関数をカプセル化することは可能ですか?私がしていたことは:クラスなしのPHPカプセル化?

//Include the file containing the class which contains the variable or function 
include('SomePage.php'); 

//Instantiate the class from "SomePage.php" 
$NewObject = new SomeClassFromSomePage(); 

//Use the function or variable 
echo $NewObject->SomeFuncFromSomeClass(); 
echo $NewObject->SomeVarFromSomeClass; 

私の意図は、名前の競合を避けることです。このルーチンは動作しますが、疲れます。私がクラスなしでそれを行うことができない場合、クラスをインスタンス化できない可能性がありますか?変数や関数をただちに使うだけですか?

+0

あなたはおそらくそのためにファクトリメソッド(またはコンパニオン手順)を使用します。変数の作成が前のメソッド呼び出しに依存する場合は、流暢な連鎖も必要です。 – mario

+0

@domanokz「命名の衝突を避ける」という意味を説明できますか? – Phil

+0

名前空間のような意味ですか? – Dani

答えて

3

インスタンス化せずにクラスメソッドと変数を使用するには、彼らはstatic宣言する必要があります。

class My_Class 
{ 
    public static $var = 123; 

    public static function getVar() { 
    return self::var; 
    } 
} 


// Call as: 
My_Class::getVar(); 

// or access the variable directly: 
My_Class::$var; 

PHP 5.3で、あなたもnamespaces

namespace YourNamespace; 

function yourFunction() { 
    // do something... 
} 


// While in the same namespace, call as 
yourFunction(); 

// From a different namespace, call as 
YourNamespace\yourFunction(); 
+0

この場合、 '$ var'をどのように使うのですか?または '$ getVar'? – dpp

+0

@domanokzあなたのコメントを入力している間、私が作った追加を見てください –

+0

ありがとうございますが、二重コロンは私には新しく、 ' - 'の代わりに '::'を使わなければなりませんか? – dpp

2

PHP Namespacesを使用することができます正確に同じをアーカイブするためになされました目標:

<?php // foo.php 
namespace Foo; 
function bar() {} 
class baz { 
    static $qux; 
} 
?> 

このような呼び出し名前空間の機能を使用する場合:

<?php //bar.php 
include 'foo.php'; 
Foo\bar(); 
Foo\baz::$qux = 1; 
?> 
+0

と@domanokzは変数名の衝突を避けたいと思います。名前空間はこれを解決しません。http://stackoverflow.com/questions/5287315/can-php-namespaces-contain-variablesを参照してください。 – Phil

+0

@Phil静的クラス変数は、ここで唯一のオプションです – sanmai

関連する問題