PHP面向对象编程详解:类和对象

PHP面向对象编程详解:类和对象

从OOP的视角看,不应区分语言。无论是C++、无论是Java、无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思想轻松的跳跃。便没有对于Java、.net、PHP 之间谁强谁弱的争执了。

希望这个介绍PHP5面向对象编程(OOP)的资料能让初学者受益,能让更多的PHPer开始转向OO的编程过程。

相对PHP4,PHP5在面向对象方面改变了很多。我们将只介绍PHP5环境下的面向对象。而我们必须改变自己来跟随PHP5的发展。如果代码结果在你的环境下执行不一致,请确认你的环境为PHP5。

我们假设读者没有任何面向对象的知识,即使你是第一次听说OOP,也可以读懂这文章。但我希望你必须对PHP有一些了解。

在后面我们将使用一些例子,来逐渐分析PHP5的OO基础。

面向对象只解决了两个问题,代码的可扩展性 、代码的可维护性。

不得不说句,php越来越像Java了。

整理参考:http://www.lai18.com/content/425094.html

Everything is Object:万事万物皆对象。

面向对象的编程(OOP)思想力图使对计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。面向对象语言与我们的生活是想通的,面向对象语言学习起来其实很简单。在应用中更符合我们的生活逻辑。

类(Class)是用来描述一个对象(Object):

类描述了每个对象应包括的数据,类描述了每个对象的行为特征。

Class/Object:类(class)和对象(object)是面向对象方法的核心概念。

类是对一类事物描述,是抽象的、概念上的定义;

对象是实际存在的该类事物的每个个体,因而也称实例(instance)。在计算机中,可以理解为,在内存中创建了实实在在存在的一个内存区域存储着这个对象。

创建对象的过程称为创建对象,也称为实例化。

PHP5中的类和对象

我们先建立一个基础的类。

PHP中使用关键字 class 来定义一个类。类的命名一般使用首字符大写,而后每个单词首字符大写连接的方式方便阅读。


这样,我们就拥有了第一个PHP类。

我们继续来使用这个类,使用 new 这个关键字创建对象,用echo打印$p

我们定义了一个变量 $p ,使用 new 这个关键字创建了一个Person的对象。

打印变量$p,我们看到输出Object id #1 提示这是一个对象。

$p = new Person();也可以写成 $p = new Person;,但不建议使用后面的这种方式。

PHP5 中的属性

属性:用来描述对象的数据元素称为对象的属性(也称为数据/状态)

在PHP5中,属性指在class 中声明的变量。在声明变量时,必须使用 public private protected 之一进行修饰,定义变量的访问权限。

Public(公开): 可以自由的在类的内部外部读取、修改。

Private(私有): 只能在这个当前类的内部读取、修改。

Protected(受保护):能够在这个类和类的子类中读取和修改。

属性的使用:通过引用变量的 -> 符号调用变量指向对象的属性。

在方法内部通过 $this-> 符号调用同一对象的属性。

";    // 输出对象
echo "他的名字是 ".$p->name;     // 输出对象$p的属性 $name;
echo "
";
echo '他的年龄是 '$p->age; //输出age属性.
?>

程序输出结果为:

他的名字是 Gonn
他的年龄是 24

Person类有两个属性,$name 和 $age , 在实例化后,使用$p->name 和 $p->age 打印出属性的内容。

当然,你可以在属性定义时不设置初始值,那样的话,就打印不出任何结果了。

改变对象的属性,注意 8行和9行代码,还有输出结果的变化。我们看到输出的属性值被改变了。

name = 'Tom'; //变更姓名为 Tom
$p->age = 25 ; // 变更年龄为 25 岁.
echo "他的名字是 ".$p->name;     // 输出对象$p的属性 $name;
echo "
";
echo '他的年龄是 '.$p->age; //输出age属性.
?>

创建一个Person的对象,改变这个对象的属性。为它命名,查看它的名字。你就是机器里面这个Person对象的上帝,按照你定义的规则,这个实实在在内存中的Person对象被创建了,而且它有了可以改变的属性。

现在,我们就是计算机世界的上帝,准备好创造世界吧。

Private 修饰的属性,在当前对象以外不能访问。设置私有属性是为了进行数据的隐藏。

隐藏:指对象的一种保护机制,使得它的属性或方法不被外部的程序直接访问。

name;     // 输出对象$p的属性 $name;
?>

运行此程序将会输出:

Fatal error: Cannot access private property Person::$name in E:\PHPProjects\test.php on line 9

私有属性不能被外部访,这样做的好处后面会介绍到。

延伸阅读

此文章所在专题列表如下:

PHP面向对象编程详解:类和对象
PHP面向对象编程详解:类的属性
PHP面向对象编程详解:类的方法
PHP面向对象编程详解:对象的比较
PHP面向对象编程详解:构造函数
PHP面向对象编程详解:类的继承
PHP面向对象编程详解:访问控制
PHP面向对象编程详解:方法覆盖
PHP面向对象编程详解:this关键字
PHP面向对象编程详解:parent::关键字
PHP面向对象编程详解:再谈重载
PHP面向对象编程详解:获取用户数据
PHP面向对象编程详解:用户权限管理类
PHP面向对象编程详解:static变量与方法
PHP面向对象编程详解:单例模式
PHP面向对象编程详解:final类和方法
PHP面向对象编程详解:PHP中的常量
PHP面向对象编程详解:抽象类
PHP面向对象编程详解:抽象方法
PHP面向对象编程详解:抽象类继承抽象类
PHP面向对象编程详解:静态抽象方法
PHP面向对象编程详解:模板模式
PHP面向对象编程详解:接口与抽象方法
PHP面向对象编程详解:接口的实现
PHP面向对象编程详解:接口的继承
PHP面向对象编程详解:类型提示
PHP面向对象编程详解:PHP的多态
PHP面向对象编程详解:instanceof运算符
PHP面向对象编程详解:接口与组合模拟多继承
PHP面向对象编程详解:一个接口实例
PHP面向对象编程详解:简单工厂模式

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
, 数据库 编程
, c51编程
, php编程
, 对象
, 面向对象
, 变量
, windowssocket编程
, 面向对象编程
, 属性
, 描述性编程
, spci编程
, scoter编程
javaandroid编程
,以便于您获取更多的相关知识。

时间: 2024-08-31 13:22:43

PHP面向对象编程详解:类和对象的相关文章

JS面向对象编程详解_javascript技巧

序言 在JavaScript的大世界里讨论面向对象,都要提到两点:1.JavaScript是一门基于原型的面向对象语言 2.模拟类语言的面向对象方式.对于为什么要模拟类语言的面向对象,我个人认为:某些情况下,原型模式能够提供一定的便利,但在复杂的应用中,基于原型的面向对象系统在抽象性与继承性方面差强人意.由于JavaScript是唯一一个被各大浏览器支持的脚本语言,所以各路高手不得不使用各种方法来提高语言的便利性,优化的结果就是其编写的代码越来越像类语言中的面向对象方式,从而也掩盖了JavaSc

【Python之旅】第四篇(三):Python面向对象编程详解

终于是来到了Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下. 1.面向对象编程的相关名词及解释     世界万物,皆可分类,一切皆为对象.     所谓的面向对象编程,指的是一种编程的思想,通过对具体代码实现过程(面向过程编程)的不断抽象,以形成一个个的类别,以提高我们进行大型程序编写的效率(面向对象的具体实现需要面向过程,大型程序也可以用面向过程来编写,只是比较麻烦).对于面向对象编程的相关名词和解释如下: 对象 :类的实体\

Ruby面向对象编程详解_ruby专题

Ruby是纯面向对象的语言,所有项目似乎要Ruby中为一个对象.Ruby中的每个值是一个对象,即使是最原始的东西:字符串,数字甚至true和false.即使是一个类本身是一个对象,它是Class类的一个实例.本章将通过所有功能涉及到Ruby的面向对象. 类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据,转换成一个整齐的包.在一个类的数据和方法,被称为类的成员. Ruby类的定义: 定义一个类,定义的数据类型的草图. 这实际上并不定义任何数据,但它定义的类名字的意思什么,即是什么类的对象

Python中的面向对象编程详解(上)_python

创建类 Python 类使用 class 关键字来创建.简单的类的声明可以是关键字后紧跟类名: 复制代码 代码如下: class ClassName(bases):     'class documentation string' #'类文档字符串'     class_suite #类体 实例化 通过类名后跟一对圆括号实例化一个类 复制代码 代码如下: mc = MyClass() # instantiate class 初始化类 'int()'构造器 def __int__(self):  

Lua中的面向对象编程详解_Lua

简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 复制代码 代码如下: local tb1 = {a = 1, b = 2} local tb2 = {a = 1, b = 2} local tb3 = tb1   if tb1 == tb2 then      print("tb1 == tb2") else      print("tb1 ~= tb2") end   tb3.a = 3 print(tb1.a) 上述代码会输

Python中的面向对象编程详解(下)_python

继承 继承描述了基类的属性如何"遗传"给派生类.一个子类可以继承它的基类的任何属性,不管是数据属性还是方法. 创建子类的语法看起来与普通(新式)类没有区别,一个类名,后跟一个或多个需要从其中派生的父类: 复制代码 代码如下: class SubClassName (ParentClass1[, ParentClass2, ...]):     'optional class documentation string'     class_suite 实例 复制代码 代码如下: clas

Python的装饰器模式与面向切面编程详解

  这篇文章主要介绍了Python的装饰器模式与面向切面编程详解,概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能,本文详细了装饰器模式的方方面面,然后引出面向切面编程知识,需要的朋友可以参考下 今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 1

[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七:   程序包的创建与应用(聪明在于学习,天才在于积累!) --通过知识共享树立个人品牌.     继上七篇:            [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)            [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,

QtDBus编程详解(二)

                                                           QtDBus编程详解(二)   我在上一篇博客QtDBus编程详解(一)中主要讲述了与QtDBus以及DBus相关的基本概念,这一章节,我将重点讲述关于QtDBus通信.   QtDBus通信,就必须有服务端和客户端(关键是弄清楚哪一端是server,哪一端是client). 我们先来看看,QtDBus通信,server和client需要做些什么工作.   server: 1.申