PHP-类与对象(-)

  今天介绍PHP的类与对象。类与对象的概念是在编程进行到C++时代的时候开始流行的吧。估计到了JAVA就已经就已经是必须掌握的内容了。做为一个编程人,不知道类与对象就不是真正的猴子。不深入掌握,当然也算不上真正的程序员猿。在PHP中,类与对象和其他编程语言中的规范应该是没有多少差别的,但一些小的细节要留意。

我一直对中文的这个对象概念有意见,因为编程来自西方英语世界,在他们那里是叫做OBJECT的。这个英文词当然容易帮助学习编程的深刻理解这个概念。所以,在下面的文中,我会时不时用OBJECT来介绍对象的事情。
A class is an OOP (Object Oriented Programming concept, and PHP is both a procedural and OOP friendly language. 这句话的大体意思是:class 我们翻译成“类”,是面向对象编程的概念,PHP既是面向过程的语言也是面向对象的语言。
还是先举例后说明吧,因为凡是看此文的一定是有一定编程基础的。看图后解释:
在这里插入图片描述
在这里插入图片描述
首先发现了一个问题,在PHP7动态网站开发案例课堂第2版中,205页,它写到类的声明格式如下:
<?php
权限修饰符 class 类名 {
类的内容;
}
?>
但我在例子中加上权限修饰符的public的话,它就报错。在PHP手册中的英文却是:
Basic class definitions begin with the keyword class, followed by a class name, followed by a pair of curly braces which enclose the definitions of the properties and methods belonging to the class.
这个地方请高人指点,因为JAVA等的类前面可以加上PUBLIC等的。
初学者可以暂时不管这个,我们解释代码 class 后面是类的名称,跟function后面是函数名是一个道理,一般小写。类名后面没有()但函数有。类名后面是大括号,大括号里面有两个类的成员属性,好好别扭呀。并且不同的书上会有不同的叫法,比如,字段,特征等不一而足。其实我们可以直接理解成类里面的变量,其实就是变量,为什么又叫成员属性,还有将要提到的成员方法呢?是因为除了他们还有类属性和类方法。这两种有什么区别呢,简单的说, 成员属性,成员方法是隶属于用类造成的对象的(object)的,而类属性类成员是类自身的。记住,类的这些属性方法是用static来定义的,也叫静态属性,静态方法。对象是不能够访问的。并且初学者可以不管类的属性和方法,只注意成员属性和成员方法即可。
再往下看代码,function的这个叫方法,其实就是函数,只不过在类里面就换了马甲和名字。格式和函数是一模一样的。方法里面有一个很怪的东西叫 t h i s 。 这 个 叫 什 么 是 人 们 设 计 的 , 当 然 , 现 在 P H P 里 面 只 能 这 么 叫 了 。 它 是 代 表 将 要 在 类 外 面 实 例 化 ( 制 造 对 象 ) 的 对 象 变 量 的 替 代 。 比 如 下 面 的 this。这个叫什么是人们设计的,当然,现在PHP里面只能这么叫了。它是代表将要在类外面实例化(制造对象)的对象变量的替代。比如下面的 thisPHPone,就是对象,这个类里面的 t h i s 就 是 代 表 他 的 , 如 果 制 造 的 更 多 的 对 象 , 他 就 代 表 更 多 的 对 象 。 当 然 只 是 在 类 里 面 代 表 , 否 则 如 何 实 现 对 象 通 过 − &gt; 这 个 符 号 访 问 属 性 和 方 法 呢 。 this就是代表他的,如果制造的更多的对象,他就代表更多的对象。当然只是在类里面代表,否则如何实现对象通过-&gt;这个符号访问属性和方法呢。 this>访this->name = n a m e 是 属 性 ( 变 量 ) n a m e 将 其 值 赋 给 对 象 属 性 ( 成 员 属 性 ) 的 。 如 果 你 认 为 类 就 是 模 板 , 可 以 生 产 好 多 的 对 象 , 那 么 对 象 就 是 类 的 成 员 的 了 , 成 员 属 性 , 成 员 方 法 就 理 解 了 。 制 造 对 象 时 , 用 的 代 码 是 先 用 n e w , 后 面 跟 着 一 个 和 类 名 字 相 同 的 函 数 , 这 里 也 就 方 法 , 叫 构 造 方 法 , 这 个 在 这 里 例 子 里 面 是 默 认 的 , 是 没 有 显 示 的 。 下 一 个 例 子 你 就 会 理 解 更 深 。 因 为 构 造 方 法 是 没 有 参 数 的 , 所 以 仅 仅 一 个 括 号 跟 着 后 面 。 如 果 是 类 名 的 话 , 类 后 面 是 没 有 括 号 的 。 所 以 这 个 是 方 法 , 本 质 是 函 数 , 不 是 类 名 。 我 们 再 看 第 二 张 图 , 通 过 v a r d u m p ( ) 内 置 函 数 , 我 们 可 以 看 到 变 量 的 结 构 。 这 个 变 量 属 于 对 象 变 量 , 所 以 前 面 有 o b j e c t ( S t u d e n t ) 的 字 样 。 这 个 对 象 变 量 指 向 了 一 个 包 含 2 个 元 素 的 数 组 。 看 到 N U L L 了 吧 , 在 制 造 对 象 时 , 对 象 的 名 字 属 性 和 年 龄 属 性 没 有 设 置 , 所 以 是 N U L L 。 而 第 三 行 是 我 们 赋 值 了 以 后 的 对 象 变 量 的 结 构 , 里 面 就 是 名 字 是 s t r i n g ( 12 ) 了 吧 。 仔 细 观 察 。 中 间 一 行 就 是 通 过 g e t N a m e 方 法 取 得 的 名 字 显 示 效 果 。 注 意 , 是 需 要 e c h o 打 印 的 , 并 且 用 对 象 变 量 , 然 后 − &gt; 指 向 变 量 名 字 , 没 有 name 是属性(变量)name将其值赋给对象属性(成员属性)的。如果你认为类就是模板,可以生产好多的对象,那么对象就是类的成员的了,成员属性,成员方法就理解了。 制造对象时,用的代码是先用new, 后面跟着一个和类名字相同的函数,这里也就方法,叫构造方法,这个在这里例子里面是默认的,是没有显示的。下一个例子你就会理解更深。因为构造方法是没有参数的,所以仅仅一个括号跟着后面。如果是类名的话,类后面是没有括号的。所以这个是方法,本质是函数,不是类名。 我们再看第二张图,通过var_dump()内置函数,我们可以看到变量的结构。这个变量属于对象变量,所以前面有object(Student)的字样。这个对象变量指向了一个包含2个元素的数组。看到NULL了吧,在制造对象时,对象的名字属性和年龄属性没有设置,所以是NULL。而第三行是我们赋值了以后的对象变量的结构,里面就是名字是string(12)了吧。仔细观察。中间一行就是通过getName方法取得的名字显示效果。注意,是需要echo打印的,并且用对象变量,然后-&gt;指向变量名字,没有 namename)new,vardump()object(Student)2NULLNULLstring12getNameecho>,符号的变量名字.这些细节都要注意到。
内容有点多了,下一次探讨自定义带有参数的构造函数的类。通过默认构造函数生产的对象,就像一个没有标签的对象。比如上面的,生产出来之时,没有名字,没有年龄。如果要生产有名字,有年龄,有其他特征的STUDENT来,下一次再讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UncleMark编程

获取价值后的回馈,谢谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值