가끔 정적으로 호출해야 할 때가있는 메서드가있는 객체가 있습니다. PHP, 정적 메서드 오버로드
class MYOBJECT
{
private $group_id;
public function SetGroupId($_id) { $this->group_id = $_id; }
public static function GetGroupName($_id=NULL)
{
// is there any way to implement condition like this?
if(_called_as_static) $id = $_id;
else $id = $this->group_id;
$query mysql_query("SELECT name FROM group WHERE id = $id");
list($name) = mysql_fetch_array($query);
return $name;
}
}
$obj = new MYOBJECT;
$obj->SetGroupId(4);
// should work both ways
$name = $obj->GetGroupName();
$name = MYOBJECT::GetGroupName(4);
나는 그것을 이런 식으로 해결 :
public static function MYOBJECT::GetGroupName($_id=NULL)
{
if(is_object($_id)) $_id = $_id->GetGroupId();
...
}
$name = MYOBJECT:GetGroupName(4);
$name = $obj->GetGroupName($obj);
를하지만 여전히 뭔가 더 우아한 있는가?
보다이 같은 스위처 방법을 가지고 아주 나쁜 관행입니다. 메서드가 정적인지 아닌지를 커밋하는 것이 좋습니다. – deceze
if (isset ($ this)) {} –