【发布时间】:2012-03-21 09:33:17
【问题描述】:
我有一个带有方法的对象,有时我需要将其调用为静态的,有时则不需要。
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);
但是,还有什么更优雅的吗?
【问题讨论】:
-
拥有这种切换器方法是非常糟糕的做法。我建议将方法提交为静态或非静态。
-
你可以试试 if(isset($this)){}
标签: php function static overloading