php继承的一个应用
程序员文章站
2022-04-06 09:45:03
这样我 想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回 值如果是0,则表明当前用户...
这样我
想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回
值如果是0,则表明当前用户并不是博主,因此并不具有删除,编辑文章的权限。如果是返回值是1,则表明是博主本人。好
了,废话少扯。先上代码
class operationlimit
// operating limit. when no user login or is not this user
{
/* for limit the user operat at post.
* @author:xiaoai 8.12 2011
*/
static $limitobject;
public function __construct() {}
// when call the function but does not exist
public static function getobject()
{
if( !(self::$limitobject instanceof self))
self::$limitobject = new self;
return self::$limitobject ;
}
protected function setlimit() {}
public function getreada($postname)
{
return '<a herf=\'http://foodstory.me/post/'.$postname.
'.php\' class=\'readmorelink\'>readmore</a>';
}
}
class operationunlimit extends operationlimit
// when is this user
{
public static function getobject()
{
if( !(self::$limitobject instanceof self))
self::$limitobject = new self;
return self::$limitobject ;
}
public function getupdatea($name)
{
return '<a href=\'http://foodstory.me/post/'.$name.
'.php?do=update\' id=\''.$name.'\' >update</a>';
}
public function getdelecta($name)
{
return '<a href=\'javascript:delectpost('.$name
.');\' id=\'delectpost\' >delect</a>';
}
}
class limitfactory
{
public static function getlimitobject($userstatus)
// $userstatus = $session->get_status();
{
switch ( $userstatus )
{
case 0:
return operationlimit::getobject();
case 1:
return operationunlimit::getobject();
default:
return limit::getobject();
}
}
}
limitfactory是一个工厂类,兼静态类。 即不需要构造对象,它的职责只是根据传入的用户权限值,来判断该返回 operationlimit类 还是 operationunlimit类 的实例。
有一些共用的操作,比如阅读更多,operationunlimit类继承了这个方法,而后又创造了一些新方法,比如返回删除,更新链接的方法。
用法示例
$limitobj = limitfactory::getlimitobject($session->get_status());
echo $limitobj->getreada('hi');
echo $limitobj->getdelecta('hah');
下面谈点无关的,刚开始当我没有在operationunlimit类中写getobject() 静态方法,发现调用
return operationunlimit::getobject();
返回的却是超类的对象,感觉奇怪,我在getobject();方法中用的是self来表示当前的类,没有指明一定要返回超类的对象啊。当在子
类中重写了这个静态方法才ok。后来查了下google,依稀理解,编译器在刚开始的时候就把getobject方法和超类绑定在一起,因此
在子类中的调用依然是返回超类对象。
还有,是否觉得字符串中那么多转义符很难分辨,那么改用
echo <<<eeeeeee
<a href='foodstory.me/post/{$name}.php' >read more</a>
eeeeeee;
这样清爽了很多
想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回
值如果是0,则表明当前用户并不是博主,因此并不具有删除,编辑文章的权限。如果是返回值是1,则表明是博主本人。好
了,废话少扯。先上代码
复制代码 代码如下:
class operationlimit
// operating limit. when no user login or is not this user
{
/* for limit the user operat at post.
* @author:xiaoai 8.12 2011
*/
static $limitobject;
public function __construct() {}
// when call the function but does not exist
public static function getobject()
{
if( !(self::$limitobject instanceof self))
self::$limitobject = new self;
return self::$limitobject ;
}
protected function setlimit() {}
public function getreada($postname)
{
return '<a herf=\'http://foodstory.me/post/'.$postname.
'.php\' class=\'readmorelink\'>readmore</a>';
}
}
class operationunlimit extends operationlimit
// when is this user
{
public static function getobject()
{
if( !(self::$limitobject instanceof self))
self::$limitobject = new self;
return self::$limitobject ;
}
public function getupdatea($name)
{
return '<a href=\'http://foodstory.me/post/'.$name.
'.php?do=update\' id=\''.$name.'\' >update</a>';
}
public function getdelecta($name)
{
return '<a href=\'javascript:delectpost('.$name
.');\' id=\'delectpost\' >delect</a>';
}
}
class limitfactory
{
public static function getlimitobject($userstatus)
// $userstatus = $session->get_status();
{
switch ( $userstatus )
{
case 0:
return operationlimit::getobject();
case 1:
return operationunlimit::getobject();
default:
return limit::getobject();
}
}
}
limitfactory是一个工厂类,兼静态类。 即不需要构造对象,它的职责只是根据传入的用户权限值,来判断该返回 operationlimit类 还是 operationunlimit类 的实例。
有一些共用的操作,比如阅读更多,operationunlimit类继承了这个方法,而后又创造了一些新方法,比如返回删除,更新链接的方法。
用法示例
复制代码 代码如下:
$limitobj = limitfactory::getlimitobject($session->get_status());
echo $limitobj->getreada('hi');
echo $limitobj->getdelecta('hah');
下面谈点无关的,刚开始当我没有在operationunlimit类中写getobject() 静态方法,发现调用
return operationunlimit::getobject();
返回的却是超类的对象,感觉奇怪,我在getobject();方法中用的是self来表示当前的类,没有指明一定要返回超类的对象啊。当在子
类中重写了这个静态方法才ok。后来查了下google,依稀理解,编译器在刚开始的时候就把getobject方法和超类绑定在一起,因此
在子类中的调用依然是返回超类对象。
还有,是否觉得字符串中那么多转义符很难分辨,那么改用
echo <<<eeeeeee
<a href='foodstory.me/post/{$name}.php' >read more</a>
eeeeeee;
这样清爽了很多