php基础教程 第十一步 面向对象

面相对象

面向对象程序设计简称OOP(Object-oriented programming)。是一种类型的抽象,或者说是一种类型以编码的方式进行描述。概念上理解并不能直观的说明问题,以下将会有示例为读者直观的感受面向对象。

类代表一个类别,例如人、车子、动物、液体都属于一个类,在php中我们用class表示一个类。
对象指这一个类的实例化,例如人这一个类,有一个具体,如小明是一个人类,小明就是这一个类别的具体;动物也是一个类,对象可以为猴子,猩猩,马等;液体也是一个类,水属于液体这一个类别,牛奶也属于液体这一个类别。
成员函数一般指这一个类中的一些属性,例如人这个类别,有年龄、身高、性别、头发等这一些属性;液体有颜色、密度等属性。
子类指一个父类的派生,也就是人这一个类属于动物,动物这一个类别就是人类的父类,人类这一个类别指动物的子类。
父类是一个类的父亲,以上以说明。
类方法可以指类里面的一些接口动作,例如人可以吃饭、人可以走路等。

一个最为简单的面向对象示例

接下来看一下一个简单的类定义:

<?php
class Human {public $sex;public $hair;
}
?>

以上使用class 这个关键字定义了一个Human类,Human是一个类的名称,就跟函数名称一样可以自己设置,Human的意思为人,这里定义的是一个人的类别。人的属性有名字和年龄,在类名后的花括号中,编写了 public $sex;public $hair;方法,public 是对变量以及方法的修饰,表示这个变量或者方法是公开的。就像你的性别,外人可以从外貌上分表你是男是女,这些属性是公开的,可以使用public进行修饰。除了public方法可以修饰公开的属性或者方法外,还可以使用private 修饰一些私有的方法,例如你的胃消化的方法,只有你自己可以调用,外人是使用不了,这个方法可以使用private进行修饰(当然,这个比喻并不是很好的说明这个问题,接下来将会用示例进行说明)。
以下示例将Human这个类进行实例化:

$Xiaoming=new Human();

这个时候只是实例化了这个类,$Xiaoming 就是Human这个类的对象。我们可以为这个对象设置值。设置值需要添加一些方法:

<?php
class Human {public $sex;public $hair;public function set_Sex($val){$this->sex=$val;}public function set_Hair($val){$this->hair=$val;}
}$Xiaoming=new Human();
?>

以上代码中 public function set_Sex 定义了一个函数,函数名为 set_Sex,使用了public进行修饰,表示这个函数可以直接调用;这个函数接收一个参数,参数名为 $val。在set_Sex 函数的花括号中,代码为 $this->sex=$val;,$this为当前对象,指当前类,->表示一个指向,$this->sex就为当前类中的sex成员属性(变量),赋值为传入的$val。另外一个函数 set_Hair 与 set_Sex 函数形式一致,不再赘述。
接下来看如何调用这两个方法进行值的设定:

<?php
class Human {public $sex;public $hair;public function set_Sex($val){$this->sex=$val;}public function set_Hair($val){$this->hair=$val;}
}$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');
?>

以上代码中使用对象 $Xiaoming 用箭头-> 运算符调用 set_Sex 函数,并且传入了一个值为 nan(男女的拼音):$Xiaoming->set_Sex('nan');,set_Hair 函数的调用方法一致。
接下来新建两个方法。使用这两个方法调用变量,查看是否更改:

<?php
class Human {public $sex;public $hair;public function set_Sex($val){$this->sex=$val;}public function set_Hair($val){$this->hair=$val;}public function get_Sex(){return $this->sex;}public function get_Hair(){return $this->hair;}
}$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');echo $Xiaoming->get_Sex();
echo ' ';
echo $Xiaoming->get_Hair();
?>

以上代码中,使用 get_Sex() 方法获取性别,使用 get_Hair 获取是否有头发。在函数内使用return 返回了 $this->sex 的值。$this->sex 表示当前对象中的sex 成员属性。随后使用echo 进行输出。
结果如下:
在这里插入图片描述

private

我们可以在类中修改 set_Sex 的修饰public 为 private,使用 private 后外部调用将会报错:

<?php
class Human {public $sex;public $hair;private function set_Sex($val){$this->sex=$val;}public function set_Hair($val){$this->hair=$val;}public function get_Sex(){return $this->sex;}public function get_Hair(){return $this->hair;}
}$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');echo $Xiaoming->get_Sex();
echo ' ';
echo $Xiaoming->get_Hair();
?>

运行报错如下:
在这里插入图片描述
但是在类内部中是可以调用的,在以下示例中,新建了一个 printInfo 函数,使用private 进行修饰,在外部调用不了,但是在内部还是可以调用的:修改一下查看示例:

<?php
class Human {public $sex;public $hair;private function printInfo($val){echo '传入的值是 '.$val.'<br/>';}public function set_Sex($val){$this->printInfo($val);$this->sex=$val;}public function set_Hair($val){$this->hair=$val;}public function get_Sex(){return $this->sex;}public function get_Hair(){return $this->hair;}
}$Xiaoming=new Human();
$Xiaoming->set_Sex('nan');
$Xiaoming->set_Hair('y');echo $Xiaoming->get_Sex();
echo ' ';
echo $Xiaoming->get_Hair();
?>

在 printInfo 函数中,传入了一个 $val 参数,随后输出了这个参数。 printInfo 方法调用在 set_Sex 方法中,传入了 $val,用 printInfo 作为提示。
结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hype3使用体验

优点 上手简单&#xff0c;会操作常规软件操作的话一天之前可以掌握基本功能&#xff1b;屏幕适配方便&#xff0c;通过布局&#xff08;或者成为断点&#xff09;来适配不同屏幕分辨率&#xff1b;动画通过时间线方式来设定&#xff0c;并且多一行属性配置&#xff0c;而且可以…

ArcGIS实验教程——实验十四:空间数据库的建立

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 1、GeoDataBase描述 地理数据库(空间数据库)GeoDataBase是一种面向对象的数据模型,它对于地理特征的表达更接近于我们对现实世界的认识。 它建立在标准的关系数据库(RDBMS)基础…

Android NDK开发Crash错误定位[转]

使用 ndk-stack 的时候需要你的 lib 编译为 debug版的&#xff0c;通常需要下面的修改&#xff1a; 1. 修改 android.mk&#xff0c;增加&#xff0c;为 LOCAL_CFLAGS 增加 -g 选项 2. 修改 application.mk&#xff0c;增加 APP_OPTIM : debug 3. nkd-build -B 4. 从 obj/local…

Java之多线程里面的锁理解以及synchronized与Lock的区别

一、宏观的说下锁的分类 1&#xff09;锁分为乐观锁、悲观锁 悲观锁认为对于同一个数据的并发操作&#xff0c;一定是会发生修改的&#xff0c;哪怕没有修改&#xff0c;也会认为修改。因此对于同一个数据的并发操作&#xff0c;悲观锁采取加锁的形式。悲观的认为&#xff0c…

实验报告类与对象水井问题_物业设施设备巡检检查对象、周期和频次

点击上方“物业精英俱乐部”&#xff0c;关注公众号,中国物业管理行业精英联盟&#xff0c;中国百强物业企业精英学习平台。来源&#xff1a;百度文库版权归原创作者所有一巡检对象、周期和频次所谓巡检&#xff0c;并不是说将大大小小的所有物业设施都列入巡检范围&#xff0c…

龙芯2K1000LA处理器流片成功,龙芯业务全面转向LoongArch架构

2022年4月底&#xff0c;龙芯2K1000处理器完成了改版芯片&#xff08;代号龙芯2K1000LA&#xff09;的功能和性能测试&#xff0c;正在开展用户试用。龙芯2K1000LA在实现与原有版本2K1000引脚和接口兼容的基础上&#xff0c;处理器核更新为基于龙芯自主指令系统架构LoongArch&a…

php基础教程 第十一步 面向对象补充

继承 上一节中学习了php类&#xff0c;以及类方法、类成员变量相关的一些知识&#xff0c;接下来开始学习php类中的继承。本节是上一节的补充。&#xff08;其实也就是为了保持日更随便发的一篇文&#xff09; 开始 php继承是继承与父类的所有属性&#xff0c;就像你继承了你…

ArcGIS实验教程——实验十五:拓扑关系创建与编辑

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 1、拓扑关系的概念 拓扑关系是指满足拓扑几何学原理的各空间数据间的相互关系。即用结点、弧段和多边形所表示的实体之间的邻接、关联、包含和连通关系。如:点与点的邻接关系、点与面…

Sql Server 优化 SQL 查询:如何写出高性能SQL语句

1、 首先要搞明白什么叫执行计划&#xff1f; 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案&#xff0c;这个方案是由查询优化器自动分析产生的&#xff0c;比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录&#xff0c;那查询优化器会选择“索引…

【Ubuntu】ubuntu物理机安装方法:wubi

在之前的文章里我们曾经详细介绍了如何在虚拟机里安装ubuntu操作系统&#xff0c;但是一些小伙伴希望在自己的电脑里安装一个ubuntu&#xff0c;来感受一下ubuntu的硬体验。下面给大家介绍一种通过wubi的安装方法。 wubi是 Windows Ubuntu-Based Installer 缩写&#xff0c;是一…

Java之ThreadLocal

1 ThreadLocal接口出现原因 使用ThreadLocal保存当前线程的变量值&#xff0c;这样你想获取该变量的值的时候&#xff0c;获取到的都是本线程的变量值&#xff0c;不会获取到其他线程设置的值&#xff0c;早在JDK 1.2的版本中就提供java.lang.ThreadLocal&#xff0c;ThreadLo…

server如何调用 thrift_Thrift总结(二)如何快速创建自己的RPC服务

前面介绍了thrift 基础的东西&#xff0c;怎么写thrift 语法规范编写脚本&#xff0c;如何生成相关的语言的接口。不清楚的可以看这个《Thrift总结(一)介绍》。做好之前的准备工作以后&#xff0c;下面就开始如何用Thrift写RPC接口。如何用Thrift写RPC接口1. 打开之前下载的thr…

Hello Playwright:(2)简化部署方式

前言上次的文章Hello Playwright&#xff1a;(1)从开发到部署发表后&#xff0c;有网友留言问&#xff0c;有不有简化部署的方式&#xff1a;下面&#xff0c;提供 2 种可行的方案。方案 1. Copy其实 Playwright 默认是到C:\Users\用户名\AppData\Local\ms-playwright文件夹下查…

ArcGIS实验教程——实验十六:空间数据查询

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 空间数据库查询定义:从空间数据库中找出所有满足属性约束条件和空间约束条件的地理对象。 二、实验内容 (一)属性查询 1、简单查询 2、SQL查询 (二)图形查询 1、点查询 2…

C++入门指南及实战 第一步 概述及经典HelloWorld

本系列文章环境及学习门槛 编程基础&#xff1a;无年龄&#xff1a;具有一定的逻辑思维英文&#xff1a;不要求数学&#xff1a;不要求学习时长&#xff1a;每天一篇&#xff0c;一周4-5篇即可&#xff0c;每篇最多1小时死记硬背&#xff1a;不需要&#xff0c;理解至上本机环…

【数学题】男女的比例

在一个重男轻女的国家里&#xff0c;每家每户都想生男孩。若一户人家生了一个男孩&#xff0c;就不会再生了。若一家生了一个女孩&#xff0c;便会再生一个&#xff0c;直到生下男孩为止。请问这个国家(有无限多的人民)的男女比例是多少?答案&#xff1a;1比1。在某一户人家中…

为什么云服务器没西南的_去年“双11“我买的那台云服务器

一、为什么会买云服务器为什么初学者需要一台云服务器&#xff1f;从我自己那仅有的一点经验来看&#xff0c;重点无非这一个词&#xff1a;实践。细数一下初学者拥有一台云服务器的好处&#xff1a;学习操作系统、熟悉环境大部分初学者在本地使用的是windows系统&#xff0c;在…

Java线程安全以及线程安全的实现方式和内存模型(JMM)

一、了解几个概念 1&#xff09;临界区&#xff1a; 临界区指的是一个访问共用资源&#xff08;例如&#xff1a;共用设备或是共用存储器&#xff09;的程序片段&#xff0c;而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时&#xff0c;其他线程或是进…

animate 实现滑动切换效果

今天和大家分享一下用 animate 实现滑动切换效果的小例子 ------- 来自<一只有梦想的前端小白> 大家都知道jQuery 提供的有一下几种方法能够实现滑动效果&#xff1a; slideDown()slideUp()slideToggle()但是以上的滑动不太方便控制其滑动的方向&#xff0c;所以我们还是…

[不一样的依赖注入]通过递归实现容器里依赖注入

递归实现依赖注入创建所需的依赖服务类1public class Test2{3 public void PrintTest()4 {5 Console.WriteLine("Hello World");6 }7}89public class Test2 10{ 11 private readonly Test _test; 12 13 public Test2(Test test) 14 { 15 …