php class之入门篇

class(类)对于任何后台语言,都是一个很难理解的地方,我这个菜鸟学习起来,也是感觉特别吃力,如果你觉得class对你来说so easy,那你可能来错了地方。还有国内转载成灾,用度娘一搜,首页10篇几乎有7篇是同样的内容,让我这样的小白更是头大。经过了几天的学习,我对class也有了一部分的理解,这里以文章的形式写下来,一是对自己这段时间的所学做个总结,二是希望以后的初学者能不像我走那么多弯路,能看到一篇易于理解的教程(我默认每个读者都是有php基础的,如果你没有,建议移步菜鸟教程)。
class就像我们生活中的一个个实体一样(好吧,好像都是这么开头的),我们生活中有很多实体,比如人、电脑、桌子等,这些可以看到的,我们一般称之为实体。每个实体都有不同的属性,比如人有身高、体重、性别、三维等属性,桌子也有长宽高、材质等属性。class也是一样,只是class相当于我们创造出来的一个看不到的实体,我们也可以给他定义很多属性。比如我们可以创建一个男人的对象(实体和对象本文中我们认为一致,以下都称之为对象,靠近面向对象编程的意思,一般计算机语言都叫对象,大概是因为并不是实体吧。),然后给他赋予身高、体重、性别的属性。如下:
class man {
public $height;
public $weight;
private $sex;
}
这样我们就定义了一个简单的man对象,其中public 是公有的意思,就是这个man对象定义以外的地方都可以看到他,使用他。private 是私有的意思,就是man对象以外的地方都无法使用他,下面会详细介绍。
既然定义了这个对象,还给他赋予了属性,那肯定就是想使用他,要不然定义他干啥,class里面我们可以定义很多方法,这些方法同样的分为public和private两种,用来处理我们需要的一些逻辑。一个比较完整的代码如下:
class man {
public $height;
public $weight;
private $sex;
public function setData($height,$weight){
$this->height = $height;
$this->weight = $weight;
}

public function getData(){
echo "height is :".$this->height;
echo "<br>";
echo "weight is :".$this->weight;
echo "<br>";
}

public function setSex($sex){
$this->sex = $sex;
}

public function getSex(){
echo "sex is :".$this->sex;
echo "<br>";
}
}
这个类中,我们定义了四个方法,分别用来设置和使用man对象的三个属性,使用方法如下
$one = new man(); //创建一个man对象
$one->setData(170,65); //调用setData方法,给man对象设置身高、体重属性
$one->getData();//调用get方法,输出我们设置的信息,验证是否正确
echo $one->height."<br>";//输出身高
$one->height = 165; //重新设置身高
echo $one->height."<br>"; //输出重新设置后的身高
$one->setSex("男");//设置性别
$one->getSex();//输出设置的性别
创建对象是使用new 关键字来创建的,$one就相当于一个实体对象,man就是他的定义,就像生产机器人一样,我定义好了机器人的规格,就可以流水线生产了,$one 就是一个新的机器人,当然我们可以同时new很多个。
使用class里面的方法和属性,是使用->箭头这个运算符的,应该特别注意的是,使用类里面的属性时,$one->height,这里的height,是没有$美元符号的。在class内部使用自己的属性或者方法的时候,使用$this,表示调用自己的方法或者属性。
上面这段代码的执行结果就是:
height is :170
weight is :65
170
165
sex is :男

当我们执行这两句代码的时候,
one->height = 165;
echo $one->height."<br>";
发现输出的是165,表示$one这个实体的身高属性已经发生改变了,这就是上面说的,public属性可以在class的定义以为修改操作这个属性,而当我们试图使用一个私有变量的时候,比如:
echo $one->sex."<br>";
这个时候,就会报错 “ Cannot access private property man::$sex”,就是私有的属性或者方法,只允许类自己的方法去操作他,比如我们自己定义的setSex,getSex方法,而试图直接操作这个属性就会报错。
到这里一个简单的例子,就讲解完毕了,相信你看到这里应该是感觉很轻松的吧,嗯,没错,你已经入门了,下面我们再看一点稍微高级一点点的东西。我们把上面哪个man的类修改一下:
class man {
public $height;
public $weight;
private $sex;
public function setHeight($height,$weight){
$this->height = $height;
$this->setWeight($weight);
}
public function setWeight($weight){
$this->weight = $weight;
}
public function getData(){
echo "height is :".$this->height;
echo "<br>";
echo "weight is :".$this->weight;
echo "<br>";
}

}

$one = new man();
$one->setHeight(170,65);
$one->getData();
echo $one->weight."<br>";
我们修改了设置身高的方法,增加了设置体重的方法,在设置身高的方法里面调用了设置体重的方法,这里就是展示了一下类的方法互相调用的方式,没有太多东西,我们再修改一下调用的代码,如下:
$one = new man();
$two = new man();
$one->setHeight(170,65);
$two->setHeight(180,70);
$one->getData();
$two->getData();
看到这里,我们新建了两个对象,$one和$two,然后分别给他们设置属性,调用的时候发现,两次输出是不同的,这就说明,当我们创建多个对象的时候,他们之间是互不干扰的。就像一个流水线上生成出来的两个机器人一样,是互不干扰的。
看到这里,你会发现,其实我们每次创建一个对象的时候,都要new一下,然后设置属性,也许有人会问,有没有办法把这两步合成一步呢,是有的,php5给class提供了一种叫构造函数的方法。方法名字固定为__construct,会在new一个对象的时候,自动执行这个方法,注意前面是两个下划线。
class man {
public $height;
public $weight;
private $sex;
function __construct($height,$weight){
$this->height = $height;
$this->setWeight($weight);
}
public function setWeight($weight){
$this->weight = $weight;
}
public function getData(){
echo "height is :".$this->height;
echo "<br>";
echo "weight is :".$this->weight;
echo "<br>";
}

}

$one = new man(170,65);
$one->getData();
然后我们写的代码就可以改成这样,new一个对象的时候,就可以把值传进去,这个值是和构造函数的参数一一对应的。然后我们只需要一行代码就解决了赋值问题。
有了构造函数,当然就有析构函数,固定写法为__destruct();不会接受参数,析构函数的作用,简单一点理解,就是当脚本执行结束的时候,就自动销毁这个对象,用来节约内存。
class man {
public $height;
public $weight;
private $sex;
function __construct($height,$weight){
$this->height = $height;
$this->setWeight($weight);
}
public function setWeight($weight){
$this->weight = $weight;
}
public function getData(){
echo "height is :".$this->height;
echo "<br>";
echo "weight is :".$this->weight;
echo "<br>";
}
function __destruct(){
echo "对象被销毁了";
}
}

$one = new man(170,65);
$one->getData();
$one->getData();
我们增加了析构函数以后,执行了两次getData的操作,输出的结果如下:
height is :170
weight is :65
height is :170
weight is :65
对象被销毁了
当php执行结束以后,就自动销毁对象,相当于一种垃圾回收机制。注意这里是脚本执行结束,而不是对象使用结束,我们对调用的代码做如下修改:
$one = new man(170,65);
$one->getData();
$one->getData();
echo "1111";
echo "2222";
运行结果如下:
height is :170
weight is :65
height is :170
weight is :65
11112222对象被销毁了
是在php脚本执行结束的时候,自动调用了析构函数,销毁了对象,回收了内存。
好了,class的入门篇就写到这里了,下面再简单介绍静态方法和继承等操作。

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值