문제

하나의 매개 변수에 의존하는 메소드가있는 클래스가 있습니다. 이 방법을 작성하는 가장 좋은 방법은 무엇입니까?

예시:

첫 번째 방법

class Test{

    var $code;

    function Test($type){
        if($type=="A"){
            $this->code=create_function(/*some args and some code*/);
        }
        else if($type=="B"){
            $this->code=create_function(/*some args and some code*/);
        }
    }

    function use(/*some args*/){
        return call_user_func($this->code,/*some args*/);
    }
}

두 번째 방법

class Test{

    var $type;

    function Test($type){
        $this->type=$type;
    }

    function use(/*some args*/){
        if($this->type=="A"){
            //some code
        }
        else if($this->type=="B"){
            //some code
        }
    }
}

$test=new Test("A");
$test->use();

어떤 방법을 선택합니까?

도움이 되었습니까?

해결책

둘 다 (당신이 무엇을 추구하는지 더 명확하게 설명하지 않는 한). 일반적으로 특수 개체는 속성 기반 분기보다 더 나은 것으로 간주됩니다.

class Test {
    abstract function useIt();
}

class TestA extends Test {
    function useIt() { code for A }
}

class TestB extends Test {
    function useIt() { code for B }
}

다른 팁

초보자에게는 두 번째 방법을 선택할 것입니다. call_user_func 무거운 함수이며 (그리고 다른 방식으로 가장 잘 사용되는지) 코드는 엄격하게 객체 지향 방식이 아니지만 두 번째 방식은 그렇습니다.

답변 해 주셔서 감사합니다.

데이터베이스 상호 작용을위한 클래스를 구축하는이 문제에 대해 생각했습니다. 그래서 좋을 것입니다.

$db=new DB(/* host, user etc*/, "mysql");
or
$db=new DB(/* host, user etc*/, "mysqli");

그러나 그렇습니다. 가장 좋은 방법은 상속과 OO입니다. 다음과 같은 일을 할 수 있습니다.

$db=new MysqlDB(/* host, user etc*/);
or
$db=new MysqliDB(/* host, user etc*/);

다시 감사합니다.

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