문제

어쩌면 내가 질문을 요청했지만...

나는 다음과 같은 코드

abstract class ParentClass
{
    protected static $count=0;
    public static function inc()
    {
        static::$count++;
    }
    public static function getCount()
    {
        return static::$count;
    }
}

class FirstChild extends ParentClass
{

}
class SecondChild extends ParentClass
{

}

나는 그냥 사용해 다음과 같이

FirstChild::inc();
echo SecondChild::getCount();

그것은 나를 보여줍니다"1"입니다.그리고 당신은 아마 난 필요가"0":)

나는 두 가지 방법:

  1. 추가 protected static $count=0; 을 각각 유도체 클래스
  2. $count 지 않 하지만 정수 배열입니다.마 종류의 것에 incgetCount 방법:

    정적::$count[get_called_class()]++;

return static::$count[get_called_class()];

그러나 내가 생각하는 이 방법은 조금 못생긴입니다.첫번째 날을 복사/붙여 넣기,무엇이겠습니다.두 번째 잘 모르겠:)저는 그냥 좋아하지 않습니다.

더 좋은 방법이 있을 달성하기 위하여 내가 무엇을 원하는가?

미리 감사드립니다.

도움이 되었습니까?

해결책

No,당신이 정확하게 뻗어있는 두 개의 가장 실용적인 옵션이 이것을 가능하게 해줍니다.PHP 작동할 수 없습니다 마법;를 선언할 때 static protected 속성을 정확히 얻을 수 있는: 을 제공합니다.는 경우에는 구문을 제공했는 작동할 수 있는 모든 사람에게 좋은 소식이 필요하지만,그것은 것이 절대적으로 끔찍한 뉴스를 다른 사람에 대한 기대 PHP OOP 에서 행동하는 다소 온전한 방식이다.

고,기록을 위해 필요가 없는 경우 별도의 카운터 파생된 모든 클래스에는 예외 없이 다음을 고려 explicit protected static $count = 0 에서 파생되는 클래스가 해야 할 것 하나는 아름다운 해결책:당신은 당신의 자신의 카운터,당신은 요구 하나,그리고 그 사실 남아 작성된 코드에서 모두 볼 수 있습니다.

다른 팁

나는 당신이하려고하는 것을 생각하고, 인터페이스 방법 (예 : getCount ())을 추상 클래스와 파생물 클래스의 카운터, 첫 번째 선택은 최악의 옵션입니다.해당 카운트의 모든 인스턴스를 계산하지 않으면 상위 클래스에 추상적 인 정적 수를 갖는 것이 의미가 없습니다.

일반적으로 전체 아이디어가 조금 추악하다고 생각되므로 구현이 추악 할 것입니다 :)

보호 된 정적 $ count= 0을 선언 할 수 있습니다.각 어린이 클래스에 대해 해당 방식은 각 하위 클래스마다 고유하지만 클래스의 모든 인스턴스에 공통적입니다.그것은 그의 문제에 가장 우아한 해결책입니다.

abstract class ParentClass
{
    public static function inc()
    {
        static::$count++;
    }
    public static function getCount()
    {
        return static::$count;
    }
}

class FirstChild extends ParentClass
{
    protected static $count=0;
}
class SecondChild extends ParentClass
{
    protected static $count=0;
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top