欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php继承的一个应用

程序员文章站 2022-07-09 14:10:42
这样我 想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$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;
这样清爽了很多