2011-01-11 12 views
1

私が使用するフレームワーク(CodeIgniter)でライブラリにアクセスするプロセスを自動化しようとしていますが、いくつかの問題が発生しています。PHPで静的プロパティをオーバーロードする

CodeIgniterのは、現在このようにライブラリをロードします。これははるかに少ないで達成することができた何かのためのコードの全体の束であることは言うまでもない

$this->CI->load->library('name'); 
$this->CI->name->method(); 

。私はこのように私のlibにアクセスしたい

_Lib::name->method(); 

_Libクラス、右のlibをロードする(または、この場合には、LoaderクラスへのLIBのロードを指示する)の世話をします。

ただし、上記コードの結果は "unexpected T_OBJECT_OPERATOR"というエラーになります。

私の最終目標は、ライブラリと話し、できるだけ少ないコードで、グローバル変数を初期化せずにオンデマンドでロードできるようにすることです。

アイデア?できるだけ使用可能で自明である必要があることを覚えておいてください。

私は_Lib( 'name') - > method()のようなものを使用しないでください。毎回それを書くのは面倒です。

編集:(ETCやモデル、またはヘルパー、または...)私はライブラリが他のライブラリのロードを指示特性を有しているデフォルトから、私のライブラリを拡張し、デフォルトのライブラリを作成することになった

appropreateローダーに、私はあなたの答えを

$this->lib->name->method(); 

みんなありがとうを行うことができます

+0

私は申し訳ありませんが、実際の違いは_Lib :: name-> method()です。 と_Lib( 'name') - > method()? 2文字?それほど大したことではありませんか?ほとんど退屈ではありません。そうであれば、あなたに役立つエディターを提案してもいいですか? – Nanne

+0

それは単なる個人的な好みです。絶対に必要とされない引用符付きの文字列を扱うのは好きではありません。私は実際にコモドをタブ補完で使用しているので、あなたは正しいです。それは面倒ではありません。私はちょうど良い言葉の欠如のために退屈だと言った。 – Naatan

答えて

2

あなたが書いたとおり、_Lib :: nameはクラス定数です。 _Lib::$name->method();を意味しましたか?

+0

あなたは正しいです、それは私の誤りでした。私はCodeIgniterで長時間働いていますが、静的なクラスを使用する方法を忘れてしまった:)ありがとう。 – Naatan

2

「予期しないT_OBJECT_OPERATOR」エラーが意味までお電話は、メソッド呼び出しを連鎖させるオブジェクトを返しませんでした。技術的には_Lib::nameはクラス定数nameの値を_Libに返します。あなたは

class _Lib 
{ 
    const name; 
} 
_Lib::name->method(); 

をやろうとしていませんが、定数は、オブジェクトを保持することはできませんので、何->

ライブラリーをスタティックコールbecause anything static couples to the global scope and is much harder to testに変換する必要はありません。 CIが提供するものをそのまま使用してください。

他のクラスを1つのクラスでグローバルに管理する場合は、Symfony ComponentsのようにDependency InjectionContainerを使用することを検討してください。

+0

あなたの返事ゴードンありがとうが、それは私にそのエラーを与える構文チェックです、それは利用可能なプロパティとは何の関係もありません。また、私はCI-> load-> library()関数へのショートカット(または試行)を提供しているだけで、上書きしません。 – Naatan

+0

@Nathan申し訳ありませんが、私の悪い。それはクラスプロパティを参照するのではなく、定数です。同じ効果。 PHPがコードを解析するときにエラーが発生した理由は、定数がオブジェクトであることができないため、値を取得した後に ' - >'( 'T_OBJECT_OPERATOR')を使用できないためです。 – Gordon

関連する問題