php, create_function 또는 런타임에 평가합니까?
-
06-07-2019 - |
문제
하나의 매개 변수에 의존하는 메소드가있는 클래스가 있습니다. 이 방법을 작성하는 가장 좋은 방법은 무엇입니까?
예시:
첫 번째 방법
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*/);
다시 감사합니다.
제휴하지 않습니다 StackOverflow