最近、あるプロジェクトでこのようなケースに遭遇しました。パフォーマンスを高めるには、すべての Model クラスがシングルトンである必要があると感じました。これは、BaseModel にシングルトンを制御するコードを追加するためです。
Java コード
/*Base class*/
class BaseModel
{
private static $instance = null
public static function instance()
{
の場合 ( empty(self::$instance)) {
空 (self::$instance)
} }各論理サブクラス モデル
/*商品クラス*/ class GoodModel extends BaseModel{
using use using using return array( ( > );
}
####################################### ######### ###########
$good = GoodModel::instance();
var_dump($good);
Java コードの場合 object(BaseModel) )#1 (0) { }不要なGoodModel
これは自己紹介の必要性です self:: 呼び出される変数がこのクラスのみのものであっても、このクラスの継承変数がオーバーライドされた場合親クラスで関数 self:: を呼び出しても、呼び出された変数は上書きされた値ではなく親クラスの変数値を出力しますそのため、静的バインディングを遅らせるには static キーワードを使用する必要があります
コードは次のとおりです
Java コード
/*Base class*/
class BaseModel
{
private static $instance = null;
public static function instance()
$good は
Java コード object(GoodModel)#1 (0) { } 実際には、 get_called_class 関数上記の問題を解決するためにも使用できます。コードは次のとおりですJava コード
class BaseModel
{
private static $instance = null; ]
オフ オフ}
}