최근 한 프로젝트에서 이러한 경우를 겪었습니다. 성능을 높이려면 모든 Model 클래스가 싱글톤이어야 한다고 생각합니다. 모든 모델이 통합된 상위 클래스인 BaseModel을 상속하므로 간단한 데모를 위해 BaseModel에 싱글톤을 제어하는 코드를 추가하세요. 다음과 같습니다:
Java 코드
/*Base class*/
class BaseModel
{
비공개 정적 $instance = null
공개 정적 함수 인스턴스()
{
if (비어 있음) ( self::$instance)) {
self::$instance = new self()
}
return self::$instance;
}
}
그런 다음 각 논리적 하위 클래스 모델
Java 코드
/*상품 클래스*/
class GoodModel은 BaseModel을 확장합니다.{
public function getInfoById($goodId){
return array(
'id'=>$goodId,
'name'=>'작은 사과',
'logo'=> ' http://t3.qlogo.cn/mbloghead/65518bb9e5287fcd5864/180'
)
}
}
########################################## ### ###########
$good = GoodModel::instance();
var_dump($good); >
그런 $good은
Java 코드
object(BaseModel)#1 (0) {
}
불필요한 GoodModel
self를 소개해야 합니다.
self:: 호출된 변수는 클래스의 변수일 뿐이며, 클래스가 상속되더라도 변수는 재정의됩니다. self:: 함수는 상위 클래스에서 호출된 변수는 여전히 덮어쓴 값 대신 상위 클래스의 변수 값을 출력합니다.
따라서 정적 바인딩을 지연하려면 static 키워드를 사용해야 합니다. static은 하위 클래스
코드는 다음과 같습니다.
Java 코드
/*base class*/
class BaseModel
{
비공개 정적 $instance = null
공개 정적 함수 인스턴스()
{
if (empty(self::$instance)) {
self::$instance = new static()
}
return self::$instance;
}
}
이때 $good은
Java 코드
object(GoodModel)#1 (0) {
}
실제로 get_called_class 함수는 또한 위의 문제를 해결하기 위한 코드는 다음과 같습니다.
Java 코드
class BaseModel
{
비공개 정적 $instance = null
공개 정적 함수 인스턴스()
{
if (empty(self ::$인스턴스)) {
$className ~ 🎜>
return self::$instance
}
}