zl程序教程

您现在的位置是:首页 >  后端

当前栏目

php继承的一个应用

2023-06-13 09:14:30 时间
这样我
想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$session->get_status()的返回
值如果是0,则表明当前用户并不是博主,因此并不具有删除,编辑文章的权限。如果是返回值是1,则表明是博主本人。好
了,废话少扯。先上代码
复制代码代码如下:

classoperationLimit
//operatinglimit.Whennouserloginorisnotthisuser
{
/*forlimittheuseroperatatpost.
*@author:xiaoai8.122011
*/
static$limitObject;
publicfunction__construct(){}
//whencallthefunctionbutdoesnotexist
publicstaticfunctiongetObject()
{
if(!(self::$limitObjectinstanceofself))
self::$limitObject=newself;
returnself::$limitObject;
}
protectedfunctionsetLimit(){}
publicfunctiongetReadA($postName)
{
return"<aherf=\"http://foodstory.me/post/".$postname.
".php\"class=\"readmoreLink\">readmore</a>";
}
}
classoperationUnlimitextendsoperationLimit
//whenisthisuser
{
publicstaticfunctiongetObject()
{
if(!(self::$limitObjectinstanceofself))
self::$limitObject=newself;
returnself::$limitObject;
}
publicfunctiongetUpdateA($name)
{
return"<ahref=\"http://foodstory.me/post/".$name.
".php?do=update\"id=\"".$name."\">update</a>";
}
publicfunctiongetDelectA($name)
{
return"<ahref=\"javascript:delectPOST(".$name
.");\"id=\"delectPOST\">delect</a>";
}
}
classLimitFactory
{
publicstaticfunctiongetLimitObject($userStatus)
//$userStatus=$session->get_status();
{
switch($userStatus)
{
case0:
returnoperationLimit::getObject();
case1:
returnoperationUnlimit::getObject();
default:
returnlimit::getObject();
}
}
}

LimitFactory是一个工厂类,兼静态类。即不需要构造对象,它的职责只是根据传入的用户权限值,来判断该返回 operationLimit类还是operationUnlimit类的实例。
有一些共用的操作,比如阅读更多,operationUnlimit类继承了这个方法,而后又创造了一些新方法,比如返回删除,更新链接的方法。
用法示例
复制代码代码如下:

$limitObj=LimitFactory::getLimitObject($session->get_status());
echo$limitObj->getReadA("hi");
echo$limitObj->getDelectA("hah");

下面谈点无关的,刚开始当我没有在operationUnlimit类中写getObject()静态方法,发现调用
returnoperationUnlimit::getObject();
返回的却是超类的对象,感觉奇怪,我在getObject();方法中用的是self来表示当前的类,没有指明一定要返回超类的对象啊。当在子
类中重写了这个静态方法才OK。后来查了下google,依稀理解,编译器在刚开始的时候就把getObject方法和超类绑定在一起,因此
在子类中的调用依然是返回超类对象。

还有,是否觉得字符串中那么多转义符很难分辨,那么改用
echo<<<Eeeeeee
<ahref="foodstory.me/post/{$name}.php">readmore</a>
Eeeeeee;
这样清爽了很多