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的入门篇就写到这里了,下面再简单介绍静态方法和继承等操作。
转载请注明出处: https://blog.csdn/shuchuan0409/article/details/80372663

更多推荐

php class之入门篇