已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 教程

标题: PHP面向对象教程(一):从函数到静态类

作者: @Ta

时间: 2011-11-27

点击: 17782

声明:在看到“全文完”之前,都处于是“连载中”
    看这篇教程之前,你应该对PHP的编程方式有足够的了解,会使用函数和自己写函数。如果不会,你可能看不懂下面这些内容。
function myname()
{
  return '老虎会游泳';
}
这是一个函数,我们可以这样使用它:
echo '我的名字是', myname();

class my
{
  static function name()
  {
    return '老虎会游泳';
  }
}
这是一个类,我们可以这样使用它:
echo '我的名字是', my::name();
    在 class 类名 { } 中定义的函数被称为类的“方法”(Method)。
    与函数定义不同的是,在function前面还可以加一个或多个关键字来说明这个方法的特殊属性,比如static(静态)等。静态类方法的调用方式和函数很像:
    类名::方法名(参数);

    事实上,普通的php函数前面加上static关键字后就可以直接放在类里面。而且一个类里面可以放很多函数,于是我们可以用类来“封装”一些相关的函数:
class my
{
 static function name {return '老虎会游泳';}
 static function age{return 10000;}
 static function phpinfo {return '这是神马?';}
}
echo '姓名:', my::name(), '<b r/>年龄:', my::age();
    另外大家可以发现,我定义了一个my::phpinfo(),这和php自带的phpinfo()不冲突。所以,类的另一个功能出现了:防止命名冲突。只要你起的类名和别人的不冲突,你的方法名可以随便起(不过php的关键字不行,比如else while echo等)。
    不过,要是类只有这么点作用的话,似乎太弱了。而且上面只提到了“类”,没有说“对象”。就如同标题中所说的一样,这一篇中提到的类是“静态”的。而动态的类:对象,将放在下一篇介绍。
    下面继续,看一个新的类:
class my{
 static $name;
 static $age;
 static $alive,$health;
  
 static function born($name)
 {
  self::$name=$name;
  self::$age=0;
  self::$health=mt_rand(0,100);
  return self::isalive();
 }

static function isalive()
{
 if(!self::$alive)
  return false;
 if(self::$health>0)
  return true;
 else
  return false;
}
static function grow()
{
if(!self::isalive())
 return false;
self::$health-=mt_rand(-5,5);
if(!self::isalive())
 return false;
self::$age++;
return true;
}

static function name()
{return self::$name;}
static function age()
{return self::$age;}
}

    以上这个类可以用来非常不准确地模拟你的一生,你知道怎么用它吗?
    我们先来看看它里面出现的新东西吧:
    static $name;
定义在class里面的变量被称为类的“属性”,它同样可以在前面加关键字,如static(静态)。
在类外面,可以使用my::$name来访问这个变量。内里面呢?my::$name也可以,不过最好用self::$name。这样做的好处是,假如哪天我把类名改成mycat,类里面的self::$name也不需要修改。
同样的,在类里面可以用 self::方法名(参数) 调用静态方法。
    写在最后:前面那个类有很大的缺陷:只能模拟一个人。假设我要做一个网页小游戏,里面有很多人,该怎么办呢?有什么方法可以方便地“复制”类?请期待下一篇内容:实例化的对象。

[隐藏样式|查看源码]


『回复列表(23|隐藏机器人聊天)』

1. 测试
(/@Ta/2011-11-27 18:48//)

2. 测试$db测试
(/@Ta/2011-11-27 18:48//)

3. 支持
(/@Ta/2011-11-27 18:58//)

4. 测试
(/@Ta/2011-11-27 18:59//)

5. 老虎写的果然容易懂些!顶!最后还是希望老虎早日把那个团队管理程序弄出来!
(/@Ta/2011-11-27 19:13//)

6. 等待更新中…
(/@Ta/2011-11-27 19:19//)

7. 虎哥我有个问题echo和return有什么区别啊!
(/@Ta/2011-11-27 20:07//)

8. function x()
{
echo '你好!';
return '你一点都不好!';
echo '555555……我绝对不会让你知道我哭了!'; //return之后的语句都不会被执行
}
$我的内心=x();
//此时,屏幕显示“你好!”,$我的内心 == '你一点都不好!';
(/@Ta/2011-11-27 20:18//)

9. 噢,明白了!
(/@Ta/2011-11-27 20:42//)

10. 还有个问题,后面这段程序中最先没定义isalive()函数,后面才定义的!这样可以吗?
(/@Ta/2011-11-27 20:48//)

11. 可以。
(/@Ta/2011-11-27 20:52//)

12. 噢。。。
(/@Ta/2011-11-27 20:57//)

13. 你现在会用form.class.php了吗?
(/@Ta/2011-11-27 21:12//)

14. 看得懂了!你的程序貌似是用的全局UBB啊?麻烦虎哥讲讲怎么做的?正则我会,就是不懂php该用那个函数!
(/@Ta/2011-11-27 21:29//)

15. 我会尽力学习的
(/@Ta/2011-11-27 23:01//)

16. 看了几遍。
(/@Ta/2011-11-27 23:28//)

17. 哦我好类啊
(/@Ta/2011-11-28 18:25//)

18. 问:为什么点下页解压失败?答:不知道
(/@Ta/2011-11-28 18:29//)

19. .
(/@Ta/2011-11-29 09:28//)

下一页 1/2页,共23楼

回复需要登录

9月18日 23:50 星期四

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1