php继承的一个应用_php技巧

这样我
想到了继承来解决,前面发表过一个会话类,这下简单多了,通过登录来设置用户的级别,$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;
这样清爽了很多

时间: 2024-05-11 11:44:45

php继承的一个应用_php技巧的相关文章

PHP类继承 extends使用介绍_php技巧

出来工作这么久了,项目经验倒是不少,但是当问及底层的东西时候,常常是一言不发了.现在项目设计底层的东西越来越少,可以说是真正用到的也就是那么一点,真正核心的东西都已经被框架封装好了.总感觉自己一直进步很慢,关于底层设计思想,常常也只可意会.随着时间的流逝,我们常常会感慨书到用时方恨少了,接下来一定要恶补设计思想了. 今天先来复习一下类继承. 类继承很重要,作为程序员也基本每天都会和他打交道,但是有些东西你真的都知道吗?下面是从官网上面看到的. 一个类可以在声明中用 extends,关键字继承另一

php构造方法中析构方法在继承中的表现_php技巧

本文为大家分享了php构造方法之析构方法在继承中的表现,供大家参考,具体内容如下 子类中没有定义构造方法时,会自动调用父类的构造方法.因此实例化子类时,需按照父类的构造方法的形式进行. 修改为: 子类定义了自己的构造方法,则不会自动调用父类的构造方法,但可以手动调用:parent::__construct(); 但通常,在子类,很多时候,在构造方法中,都应该(需要)去调用父类的构造方法以节省代码,增加可读性: 子类中没有定义析构方法时,会自动调用父类的析构方法.子类定义了自己的析构方法,则不会自

php 面向对象的一个例子_php技巧

复制代码 代码如下: <?php class person{ //下面是人的成员属性 var $name; //人的名字 var $sex; //人的性别 var $age; //人的年龄 //定义一个构造方法参数为姓名$name,性别$sex和年龄$age function __construct($name,$sex,$age){ //通过构造方法传进来的$name给成员属性$this->name赋初始值 $this->name=$name; //通过构造方法传进来的$sex给成员属

php array_merge函数使用需要注意的一个问题_php技巧

使用php语言的array_merge函数时,以为相同的键名会覆盖,但是请看如下代码: 复制代码 代码如下: $a1 = array(1=>'abc', 3=>10); $a2 = array(1=>'efg', 3=>20); print_r(array_merge($a1, $a2)); 会输出什么?我们预想中的是: 复制代码 代码如下: Array (     [1] => efg     [3] => 20 ) 实际上输出的是: 复制代码 代码如下: Array

php数组函数序列之array_pop() - 删除数组中的最后一个元素_php技巧

array_pop()定义和用法 array_pop() 函数删除数组中的最后一个元素. 语法 array_pop(array)参数 描述 array 必需.规定输入的数组参数. 例子 复制代码 代码如下: <?php $a=array("Dog","Cat","Horse"); array_pop($a); print_r($a); ?> 输出: Array ( [0] => Dog [1] => Cat )

java EJB 加密与解密原理的一个例子_php技巧

加密与解密原理的一个例子 package lockunlock;  import Java.awt.*;  import java.awt.event.*;  import java.Applet.*;  import javax.Swing.*;  import java.util.*;  public class LockUnlock extends JApplet {  private boolean isStandalone = false;  //Get a parameter val

用PHP实现递归循环每一个目录_php技巧

函数的原理很简单,主要就是用了一下递归调用. 复制代码 代码如下: function file_list($path){ if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if (is_dir($path."/".$file)) { echo $pat

PHP中文件上传的一个问题_php技巧

我也一直很困惑.在文档上,说的比较模糊,就是 move_uploaded_file 这个函数,加了一步检查,检查这个文件是否是有 HTTP POST 上传的, 至于,如何检查的没有说. 我google 了好一阵子,都没有能解决这个问题,也不知道问题出现在哪里.后来,终于决定看源代码.终于在 源代码里面看到 把文件名 和 php 配置中的 upload_tmp_dir 这个参数进行比较,如果文件在这个目录下面,那么 move_uploaded_file 才会进行移动操作.而且这个比较是大小写敏感,

sphinx增量索引的一个问题_php技巧

但最近发现增量的总是搜索不到,今天看了下运行日志,有如下提示: [Sun Apr 17 19:30:01.876 2011] [ 3400] WARNING: rotating index 'news_delta': cur to old rename failed: rename /dev/shm/sphinx/data/news_delta.spa to /dev/shm/sphinx/data/news_delta.old.spa failed: No such file or direc