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.net/shuchuan0409/article/details/80372663

php class之入门篇相关推荐

  1. 女友问粉丝过万如何庆祝,我发万字长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学妹|学弟|小白看了就懂

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 粉丝破万了 新星计划申 ...

  2. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...

  3. SQL注入漏洞全接触--入门篇

    随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

  4. Symbian开发系列 - 入门篇

    要开始我的Symbian开发之旅了, 先收集一些相关资料,如Symbian概述, 开发平台搭建, 参考书籍与网络资源. [基础] 什么是Symbian 学习Symbian的基本概念  Symbian操 ...

  5. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

  6. 【SSRS】入门篇(二) -- 建立数据源

    原文:[SSRS]入门篇(二) -- 建立数据源 通过 [SSRS]入门篇(一) -- 创建SSRS项目 这篇,我们建立了一个SSRS项目: 接下来,我们以 AdventureWorks2012 示例 ...

  7. Python从入门到精通 - 入门篇 (下)

    上一讲回顾:Python从入门到精通 - 入门篇 (上) 接着上篇继续后面两个章节,函数和解析式. 4 函数 Python 里函数太重要了 (说的好像在别的语言中函数不重要似的).函数的通用好处就不用 ...

  8. Python从入门到精通 - 入门篇 (上)

    转载自微信公众号:王的机器 0 引言 微信公众号终于可以插代码了,Python 可以走一波了.首先我承认不是硬核搞 IT 的,太高级的玩法也玩不来,讲讲下面基本的还可以,之后带点机器学习.金融工程和量 ...

  9. matplotlib中文文档_python绘图库——Matplotlib及Seaborn使用(入门篇1)

    在数据分析过程中,数据及模型可视化是无可避免的,同时这也是展示我们数据分析成果的最佳方式.因此,熟悉掌握绘图库的使用,对精进我们的数据分析技能起着不可替代的作用. 今天,我们就来了解一下python强 ...

  10. c# imager让图片有圆角unity_C# 10分钟完成百度图片提取文字(文字识别)——入门篇...

    现在图片文字识别已经很成熟了,比如qq长按图片,点击图片识别就可以识别图片的文字,将不认识的.文字数量大的.或者不能赋值的值进行二次可复制功能. 我们现在就基于百度Ai开放平台进行个人文字识别,dem ...

最新文章

  1. iOS - OC 与 C 互相操作
  2. 大学计算机spoc长安大学答案,2018春C语言程序设计 上(长安大学)
  3. 51nod 1536不一样的猜数游戏 思路:O(n)素数筛选法。同Codeforces 576A Vasya and Petya‘s Game。
  4. 用硬盘安装linux物理机,老爷机安装UBUNTU的悲剧之旅(附用GRUB2硬盘安装ubuntu教程)...
  5. iOS开发:为什么你的学习效率如此低,为什么你很迷茫?
  6. 使用数据库DEAP来分析基于EEG信号的情绪论文调研汇总
  7. 电脑桌面便签怎么编辑修改便签内容?
  8. GPIF II designer使用说明+CYUSB3014芯片基本信息介绍——英文文档学习记录
  9. 风险热度地图(Risk heat map)
  10. Swing 美化包-JTattoo
  11. Java 获取姓氏并获取姓氏的笔画数
  12. 【架构师之路】四、系统架构
  13. linux 硬盘时间查询,Linux 查看硬盘通电时间
  14. 如何用Python从海量文本抽取主题?【转载:王树义】
  15. Android 无标题 全屏设置
  16. 有道词典java下载手机版下载手机版_有道词典app下载_有道词典在线翻译下载安装手机版v9.08...
  17. ADI Blackfin DSP处理器-BF533的开发详解61:DSP控制ADXL345三轴加速度传感器-LCD(含源码)
  18. NDK编译时NDK_PROJECT_PATH = null
  19. ARM的强硬未能吓住高通,高通和中国芯片的远离导致ARM前景黯淡
  20. 微信小程序 本地存储

热门文章

  1. 三星 android 5.0 root,三星N9008S Android 5.0 (GALAXY Note 3 移动4G)ROOT教程,简单几步完成ROOT...
  2. 9月手机战 国产手机能否逆袭
  3. linux系统编程下的open函数使用方法
  4. 学术报告系列(五) - 基于智能机器人的室内空间巡检巡查方案
  5. 阿里云主机性能评测之硬盘
  6. 香港富士通:借助8Manage打通数字化管理的“奇经八脉”
  7. linux安装DNS服务命令,linux配置dns服务器配置命令
  8. ubuntu重启后无法进入系统问题-显卡驱动问题
  9. 你听的不仅仅是周杰伦的歌,还有自己的青春
  10. 微信公众号开发java版-消息回复(普通文字消息和语音消息)