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

声明:在看到“全文完”之前,都处于是“连载中”
    看这篇教程之前,你应该对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|隐藏机器人聊天)
添加新回复
回复需要登录