PHP 面向对象:类和对象
2019独角兽企业重金招聘Python工程师标准>>>
从OOP的视角看,不应区分语言。无论是C++、无论是Java、无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思想轻松的跳跃。便没有对于Java、.net、PHP 之间谁强谁弱的争执了。
希望这个介绍PHP5面向对象编程(OOP)的资料能让初学者受益,能让更多的PHPer开始转向OO的编程过程。
相对PHP4,PHP5在面向对象方面改变了很多。我们将只介绍PHP5环境下的面向对象。而我们必须改变自己来跟随PHP5的发展。如果代码结果在你的环境下执行不一致,请确认你的环境为PHP5。
我们假设读者没有任何面向对象的知识,即使你是第一次听说OOP,也可以读懂这文章。但我希望你必须对PHP有一些了解。
在后面我们将使用一些例子,来逐渐分析PHP5的OO基础。
面向对象只解决了两个问题,代码的可扩展性 、代码的可维护性。
不得不说句,php越来越像Java了。
Everything is Object:万事万物皆对象。
面向对象的编程(OOP)思想力图使对计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。面向对象语言与我们的生活是想通的,面向对象语言学习起来其实很简单。在应用中更符合我们的生活逻辑。
类(Class)是用来描述一个对象(Object):
类描述了每个对象应包括的数据,类描述了每个对象的行为特征。
Class/Object:类(class)和对象(object)是面向对象方法的核心概念。
类是对一类事物描述,是抽象的、概念上的定义;
对象是实际存在的该类事物的每个个体,因而也称实例(instance)。在计算机中,可以理解为,在内存中创建了实实在在存在的一个内存区域存储着这个对象。
创建对象的过程称为创建对象,也称为实例化。
PHP5中的类和对象
我们先建立一个基础的类。
PHP中使用关键字 class 来定义一个类。类的命名一般使用首字符大写,而后每个单词首字符大写连接的方式方便阅读。
<?
class Person
{}$p = new Person();echo $p;
?>
这样,我们就拥有了第一个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-> 符号调用同一对象的属性。
<?
class Person{public $name = "Gonn"; //定义public属性 $name.public $age = 20; // 定义 public 属性 $age;
}
$p = new Person(); // 创建对象
echo $p."<br>"; // 输出对象
echo "他的名字是 ".$p->name; // 输出对象$p的属性 $name;
echo "<br>";
echo '他的年龄是 '$p->age; //输出age属性.?>
程序输出结果为:
他的名字是 Gonn
他的年龄是 24
Person类有两个属性,$name 和 $age , 在实例化后,使用$p->name 和 $p->age 打印出属性的内容。
当然,你可以在属性定义时不设置初始值,那样的话,就打印不出任何结果了。
改变对象的属性,注意 8行和9行代码,还有输出结果的变化。我们看到输出的属性值被改变了。
<?
// 1-4.php
class Person{public $name = "NoName"; //定义public属性 $name.public $age = 20; // 定义 public 属性 $age;
}
$p = new Person(); // 创建对象
$p->name = 'Tom'; //变更姓名为 Tom
$p->age = 25 ; // 变更年龄为 25 岁.
echo "他的名字是 ".$p->name; // 输出对象$p的属性 $name;
echo "<br>";
echo '他的年龄是 '.$p->age; //输出age属性.?>
创建一个Person的对象,改变这个对象的属性。为它命名,查看它的名字。你就是机器里面这个Person对象的上帝,按照你定义的规则,这个实实在在内存中的Person对象被创建了,而且它有了可以改变的属性。
现在,我们就是计算机世界的上帝,准备好创造世界吧。
Private 修饰的属性,在当前对象以外不能访问。设置私有属性是为了进行数据的隐藏。
隐藏:指对象的一种保护机制,使得它的属性或方法不被外部的程序直接访问。
<?
// 1-3.php
class Person{private $name = "Gonn"; //定义public属性 $name.public $age = 20; // 定义 public 属性 $age;
}
$p = new Person(); // 创建对象echo "他的名字是 ".$p->name; // 输出对象$p的属性 $name;?>
运行此程序将会输出:
Fatal error: Cannot access private property Person::$name in E:\PHPProjects\test.php on line 9
私有属性不能被外部访,这样做的好处后面会介绍到。
转载于:https://my.oschina.net/kisscucci/blog/14470
PHP 面向对象:类和对象相关推荐
- Python之面向对象类和对象
Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object):"""类里定义一类事物共同的技能.可以是变量,也可是函数.& ...
- php面向对象——类和对象
php面向对象--类和对象 1.类和对象 <?php //定义一个类: class A{public $name="John"; //定义一个普通属性static $age= ...
- java面向对象-类和对象
Java面向对象笔记 文章目录 Java面向对象笔记 java面向对象 类和对象 什么是类 定义 创建和使用 公式 构造方法 什么是构造方 怎么定义和使用构造方法 实列 This关键字 什么是成员变量 ...
- 笔记整理2----Java语言基础(二)06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础
06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础 第06天 java基础语法 今日内容介绍 Eclipse断点调试 基 ...
- 面向对象---类与对象
1 面向对象思想 1.1 面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,以对象为基础完成各种操作,强调的是对象.它是基于面向过程的. 这里的对象泛指现实中一切事 ...
- Python基础day07【文件读写、文件夹操作、面向对象(类、对象)】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] 目录 01.复习 1.1.递归函数参数问题 1.2.格式化输出位数 1.3.extend函数解 ...
- javaSE各阶段练习题---面向对象-类与对象、封装、构造方法(1
1-8题抽查提问,能够使用给自己的语言表述 1.什么是面向对象?1.是一种编程思想JAVA语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想.我们在面向对象思想的指引下, 使用java ...
- C++学习笔记:(一)面向对象 类与对象
目录 1.面向对象的概念 2.类与对象 2.1 类的定义格式 2.2 对象的定义与使用 2.3 构造函数和析构函数 2.4 内存的动态分配 2.5 对象数组和对象指针 2.6 函数参数的传递机制 2. ...
- Python学习9 面向对象 类和对象
面向对象和面向过程 类和对象 类的设计 类的创建 self:相当于当前对象:类似于Java中的this 类的创建和使用: #类的命名:每个单词首字母大写 class Dog:#属性name = 'do ...
- 8.面向对象-----类和对象
一.面向对象的三条主线 1.Java类及类的成员:属性.方法.构造器:代码块.内部类 2.面向对象的大特征:封装性.继承性.多态性.(抽象性) 3.其它关键字:this.super.static.fi ...
最新文章
- Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了
- C# 构造函数中调用虚函数
- jquery 里面对数组去重操作-unique
- 梯度提升树python_梯度增强树回归— Spark和Python
- android:configchanges的作用,将uiMode附加到android:configChanges实际做什么?
- C#常用类 改配置文件
- 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型
- iPhone 12不标配充电器后,国产手机配件成了国外抢手货!
- java 数据库 模板_JAVA操作数据库的模板方法
- Google提供的超强圆角效果
- matlab 灰度图像矩阵,MatLab矩阵运算——图像灰度化
- ubuntu 旺旺_Ubuntu 下通过Wine安装阿里旺旺并解决中文乱码
- [重要]宝塔面板Linux7.4.3/Windows6.8紧急更新
- Swift游戏实战-跑酷熊猫 03 熊猫跑动动画
- 【实践案例分享】阿里文娱智能营销增益模型 ( Uplift Model ) 技术实践
- Android Sprd省电管理(四)自启动和关联启动管理
- 1.1.24 制作红头文件
- k8s部署nginx
- web安全之Webshell管理工具
- docker入门基础(四)