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里面只能这么叫了。它是代表将要在类外面实例化(制造对象)的对象变量的替代。比如下面的 one,就是对象,这个类里面的 t h i s &gt; 访 this就是代表他的,如果制造的更多的对象,他就代表更多的对象。当然只是在类里面代表,否则如何实现对象通过-&gt;这个符号访问属性和方法呢。 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;指向变量名字,没有 符号的变量名字.这些细节都要注意到。
内容有点多了,下一次探讨自定义带有参数的构造函数的类。通过默认构造函数生产的对象,就像一个没有标签的对象。比如上面的,生产出来之时,没有名字,没有年龄。如果要生产有名字,有年龄,有其他特征的STUDENT来,下一次再讨论。

猜你喜欢

转载自blog.csdn.net/Mark21577/article/details/85068439