类与对象:

  • 类的定义与实例化。
//定义类
class person{
public $name;
public $gender;
public function say(){
echo $this->name,"\tis ",$this->gender,"\r\n";
}
} class family{
public $people;
public $location;
public function __construct($p,$loc)
{
$this->people=$p;
$this->location=$loc;
} } //实例化
$student=new person();
$student->name='Tom';
$student->gender="male";
$student->say(); $teacher=new person();
$teacher->name='Kate';
$teacher->gender="female";
$teacher->say();
  • 类定义了一系列的属性和方法,并提供了实际的操作细节,这些方法可以用来对属性进行加工。
  • 对象含有类属性的具体值,这就是类的实例化。正是由于属性的不同,才能区分不同的对象。在上面例子里,由于student和teacher的性别和姓名不一样,才得以区分开二人。
  • 对象由属性和方法组成
  • 由于PHP的对象是用数组来模拟的,因此我们把对象转为数组,就能看到这个对象所拥有的属性了。
print_r((array)$student);
var_dump($student);
  • 对象就是一堆数据。既然如此,可以把一个对象存储起来,以便需要时用。这就是对象的序列化。
$str=serialize($student);
echo $str;
file_put_contents('store.txt', $str);
$str=file_get_contents('store.txt');
$student=unserialize($str);
$student->say();
  • 对象序列化后,存储的只是对象的属性。类是由属性和方法组成的,而对象则是属性的集合,由同一个类生成的不同对象,拥有各自不同的属性,但共享了类的代码空间中方法区域的代码
  • 对象也是一种很普通的变量,不同的是其携带了对象的属性和类的入口。
  • 而对象和数组的区别在于:对象还有个指针,指向了它所属的类。在对student对象序列化时,我们看到了“person”这几个字符,这个标识符就标志了这个对象归属于person类,故在取出这个对象后,可以立即对其执行所包含的方法。
$tom=new family($student,'peking');
echo serialize($student);
echo "-----------\n";
$student_arr=array('name'=>'Tom','gender'=>'male');
echo "-----------\n";
echo serialize($student_arr);
print_r($tom);
echo "-----------\n";
echo serialize($tom);
  • 类是定义一系列属性和操作的模板,而对象则把属性进行具体化,然后交给类处理。
  • 对象就是数据,对象本身不包含方法。但是对象有一个“指针”指向一个类,这个类里可以有方法。
  • 方法描述不同属性所导致的不同表现。
  • 类和对象是不可分割的,有对象就必定有一个类和其对应,否则这个对象也就成了没有亲人的孩子(但有一个特殊情况存在,就是由标量进行强制类型转换的object,没有一个类和它对应。此时,PHP中一个称为“孤儿”的stdClass类就会收留这个对象)。

参考资料

  • [PHP核心技术与最佳实践]

PHP核心技术——面向对象的更多相关文章

  1. Java匹马行天下之JavaSE核心技术——面向对象

    面向对象 注: 看此篇时强烈建议有一定的面向对象思想基础,有一定的基础后先翻到下面看第九条:      9.面向对象: 从未封装→封装→继承→多态→抽象类→接口的代码演变 按这个逻辑去看,,哪有不理解 ...

  2. 看完就能掌握的PHP核心技术 - ​​​​​​​​面向对象

    继承和多态 类的组合与继承 假设我们有两个类,一个 person,另外一个是 family:在 family 类中我们创建 person 类中的对象,并且我们把这个对象视为 family 类的一个属性 ...

  3. Java-Java面向对象程序设计

    2017-10-09 17:23:52 在面向对象技术中,将客观世界中的一个事物作为一个对象来考虑,比如有个张先生,他就是一个对象.每个对象都有自己的属性和行为.张先生的属性根据需要有姓名.性别.身高 ...

  4. Java匹马行天下之新手学习目录

    Java匹马行天下之新手学习目录 学习路线 [Java匹马行天下——Java学习路线] [Java匹马行天下——开篇学习计划] 基础篇 [Java匹马行天下之学编程的起点——编程常识知多少] [Jav ...

  5. Java核心技术及面试指南 面向对象部分的面试题总结以及答案

    问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...

  6. Python核心技术与实战——十|面向对象的案例分析

    今天通过面向对象来对照一个案例分析一下,主要模拟敏捷开发过程中的迭代开发流程,巩固面向对象的程序设计思想. 我们从一个最简单的搜索做起,一步步的对其进行优化,首先我们要知道一个搜索引擎的构造:搜索器. ...

  7. Python核心技术与实战——九|面向对象

    在搞清了各种数据类型.赋值判断.循环以后如果是从C++.Java语言入手的,就会有一个深坑要过:OOP(object oriented programming):公私有保护.多重继承.多态派生.纯函数 ...

  8. 面向对象核心技术(java)

    一.类的封装详解 在“面向对象编程基础(java)”的时候讲过,封装是面向对象编程的核心思想.同时我们也知道类是载体,只不过我们把对象的属性和行为封装在载体中. 现我们用封装的方式来实现,一个顾客去一 ...

  9. Hibernate核心技术简介

    Hibernate核心技术简介 1.Hibernate映射文件开发     Hibernate映射文件就是项目中*.hbm.xml文件,其主要是完成各元素的配置,包括根元素.类元素.定义主键.设置主键 ...

随机推荐

  1. eclipse中DDMS 视图中sdcard中文件导入的处理

    首先需要说明下,这里说的sdcard的权限并不是指在Android application程序中设置sdcard的权限读 取问题.而是指在DDMS看到的目录下的那个sdcard目录的权限问题.     ...

  2. 一步一步pwn路由器之radare2使用实战

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前文讲了一些 radare2 的特性相关的操作方法.本文以一个 c ...

  3. 2018-10-13 21:30:51 conversion of number systems

    2018-10-13 21:30:51  c language 二进制.八进制和十六进制: 1) 整数部分 十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法. 十进制数字 36926 转 ...

  4. windows 命令行使用p4

    首先,p4的命令行真的恶心,要不是非要用我一定换成git(逃) 参考网站:https://www.perforce.com/manuals/v15.1/cmdref/p4_add.html 全程尝试各 ...

  5. 使用 Azure CLI 创建 Linux 虚拟机

    Azure CLI 用于从命令行或脚本创建和管理 Azure 资源. 本指南详细介绍了如何使用 Azure CLI 部署运行 Ubuntu 服务器的虚拟机. 服务器部署以后,将创建 SSH 连接,并且 ...

  6. asp.net使用一般处理程序实现文件下载

    首先有一个html页面,页面有一个链接,点击链接弹出文件下载/保存(类似迅雷下载链接) <!DOCTYPE html> <html> <head> <meta ...

  7. idea常用到的命令

    idea大小写转换:ctr+shift+u ctrl+alt+b,跳转到接口的方法实现处

  8. Python学习---ModelForm拾遗180325

    ModelForm适用于前台验证和后台直接操作数据库的前后台未做分离,可以一次执行验证和保存数据的场景. 注意:  1.  ModelForm里面没有删除方法,需要手动删除内容 2. ModelFor ...

  9. 【JS】#001 JS定义对象写法(原型、JSON方式)

    下面主要写两种 JS 定义对象的 常用写法 写法1:[很像面向对象语言中的写法] function zhongxia(age) { this.age = age; } zhongxia.name = ...

  10. debian 7 终端上无法调出输出法

    debian 7 终端konsole上无法调出输出法,无法输入汉字的问题解决方案, export GTK_IM_MODULE=fcitxexport QT_IM_MODULE=fcitxexport ...