PHP入门-PHP OOP类的继承(构造函数;public、protected和private;self、parent、final )

2023-11-15

0x00  写在前面

从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,需要有简单的html基础和php基础,跟随流沙前辈视频学习记录。

OOP编程即面对对象编程,本篇学习面向对象中的继承。

0x01 构造函数和析构函数

了解继承之前,先初步学习构造函数和析构函数。

参考链接:PHP: 构造函数和析构函数 - Manual

初步了解构造方法和析构方法

test1.php
<?php
	header("Content-type:text/html;charset=utf-8");
	class Human{
		public $name;
		public $food;

		public  function __construct(){	       //构造方法使用的时 __construct
			echo "这是构造方法</br>";
		}
		public function eat(){
			echo $this->name."吃".$this->food."<br/>";	//方法里调用属性要使用$this
		}
		public function __destruct(){		//析构方法使用__destruct
			echo "这是析构方法</br>";
		}
	}

	$man = new Human();			//实例化对象
	$man->name = "老人";			
	$man->food = "米饭";
	$man->eat();				//虽然我们这里只调用了一个eat();但是构造方法和析构方法都会自动调用

	$x = new Human();			//实例化对象
	$x->name = "小米";
	$x->name = "肉";
	$man->eat();	            //虽然我们这里只调用了一个eat();但是构造方法和析构方法都会自动调用

构造函数相较于析构函数更加常用;构造方法的主要作用是对属性进行赋值。

下面代码显示构造函数的小例子

test2.php
<?php
	header("Content-type:text/html;charset=utf-8");
	class Human{
		public $name;
		public $food;

		public  function __construct($name,$food){	       //构造方法使用的时 __construct,
			$this->name = $name;			//这里对于属性进行一个初始化
			$this->food = $food;			//这里对于属性进行一个初始化
			//echo "这是构造方法</br>";
		}
		public function eat(){
			echo $this->name."吃".$this->food."<br/>";	//方法里调用属性要使用$this
		}

	}
	$p = new Human("小米","米饭");		//对应构造方法的$name,$food
	$p->eat();

0x02 类的继承

个人感觉继承的存在主要是用来提高代码使用效率的,比如建立一个模块,成为它的子类直接调用即可,达到低耦合的作用。

参考链接:PHP: 对象继承 - Manual

初步了解继承

test3.php
<?php
	header("Content-type:text/html;charset=utf-8");
	//继承的关键字是extends

	class Father{			            //定义一个父类
		public function Money(){
			echo "100000";	
		}
	}

	class Son extends Father{			//使用extends定义一个子类
		public function useMoney(){    
			echo "-1000";
		}
		//也可以重写父类
		/*
		public function Money(){
			echo "5000";    		//如果敲入此代码,那么下面的实例化对象在调用Money()时会输出5000而不是-1000
		}
		*/
	}

	$s = new Son();		//实例化一个对象
	$s->useMoney();		//调用useMoney
	$s->Money();		//因为子类继承了父类,所以也可以使用Money()

访问修饰符用来限定访问位置,即限定条件 

public         表示全局,类内外部都能访问

protected   表示受保护的,外部不可以访问

private       表示私有的,只有本类才可访问

                           public                protected                 private

外部                        Y                         N                             N

子类中()                  Y                         Y                             N

本类中                    Y                         Y                              Y

限定条件简单代码

test4.php
<?php
	header("Content-type:text/html;charset=utf-8");
	//继承的关键字是extends

	class Father{			            //定义一个类
		public $a = "aaaa";
		protected $b = "bbbb";          //这是在本类中
		private $c = "cccc";

		public  function show1(){  
			echo "father show1<br/>";
		}
		protected  function show2(){
			echo "father show2<br/>";
		}
		private  function show3(){
			echo "father show3<br/>";
		}
	}

	class Son extends Father{		
		public  function show(){
			echo $this->a."<br/>";    
			echo $this->b."<br/>";
			echo $this->c."<br/>";      //访问test4.php时会发现是无法输出的,因为限定条件是private
		}
	}

	$s = new Son();
	$s->show();

0x02 self 、parent and final

this代表本对象;self代表本类;parent代表父类

self往往用在静态变量、静态方法;parent指向父类

参考链接:PHP中this,self,parent的区别 - 腾讯云开发者社区-腾讯云

parent例子

test4.php
<?php
	header("Content-type:text/html;charset=utf-8");
	//继承的关键字是extends

	class Father{			            //定义一个类
		public $a = "aaaa";
		protected $b = "bbbb";          //这是在本类中
		private $c = "cccc";

		public  function show1(){  
			echo "father show1<br/>";
		}
		protected  function show2(){
			echo "father show2<br/>";
		}
		private  function show3(){
			echo "father show3<br/>";
		}
	}

	class Son extends Father{		
		public  function show(){
			parent::show1();         //子类中调用父类的方法使用parent
			parent::show3();		 //因为是show3()是private,所以会报错
		}	
	}

	$s = new Son();
	$s->show();

final如果修饰了一个类,那么该类无法被继承;如果修饰一个方法,那么该方法无法被重写

参考链接:final关键字在PHP中的使用 - 腾讯云开发者社区-腾讯云

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP入门-PHP OOP类的继承(构造函数;public、protected和private;self、parent、final ) 的相关文章

  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • 如何将 HTML 转换为 Markdown?

    我有一个类似 stackoverflow 的网站 有一个文本区域 人们可以在其中写答案 我用这个 PHP 库 http parsedown org 转换降价 我的意思是我使用该函数来转换 italic to i italic i inclu
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 如何通过php的require()或include()函数传递变量?

    当我使用这个时 require diggstyle code php page page no 警告是 无法打开流 第 198 行 C xampp htdocs 4ajax gallery core php 中没有错误 错误是 Failed
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 如何在类似 MVC 的页面中加载基于漂亮 URL 的类?

    我想请教一些关于如何解决这个问题的提示 我正在尝试构建自己的 MVC 网站 我了解了 URL 的基础知识 http example com blog cosplay cosplayer expo today 博客 gt 控制器cosplay
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • 将 Google 信任徽章添加到 Magento

    我正在尝试将 Google Trust Badge 添加到我的 magento 商店 我尝试在 Magento 网站上搜索扩展程序 但找不到 我是否需要将以下代码粘贴到产品和结账页面 还是必须对其进行更改 如果有人能引导我走向正确的方向 我
  • 如何在 yii2 中使用两个不同的模型登录或切换身份类别?

    我想允许用户从两个不同的模型登录 配置文件 user gt identityClass gt app models User one more class here enableAutoLogin gt false authTimeout
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • 检查 $_POST 数据

    我正在对表单进行一些垃圾邮件检查 下面的代码在我的本地主机上正常工作 如果为 true 则重定向到 google com 但是 当它在生产服务器上时却不起作用 执行脚本的其余部分并且不重定向到 Google com if POST SERV
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • 使用 php-ews(Exchange Web 服务)在特定日期后获取电子邮件

    在我的 PHP 脚本中 我需要弄清楚如何检索指定消息 ID 之后或特定日期之后的所有电子邮件 两者都可以 我只需要检索自上次抓取收件箱以来的新电子邮件 这个收件箱每天收到数千封电子邮件 而且我在 30 天内无法删除任何电子邮件 对于初始导入
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2

随机推荐

  • 数据结构初阶 ---- 顺序表的(C语言)实现

    目录 一 动态顺序表的结构体定义 二 动态顺序表的函数接口 1 顺序表的初始化 2 顺序表的销毁 3 打印结构体数组内的内容 4 检查数组容量 容量不够时 扩容 5 顺序表的尾插 6 顺序表的尾删 7 顺序表的头插 8 顺序表的头删 9 顺
  • jffs2:You cannot use older JFFS2 filesystems with newer kernels错误

    jffs2 You cannot use older JFFS2 filesystems with newer kernels错误 原因 可能在于交叉编译linux内核时 没有打开jffs2系统的使能开关 解决方法 在内核文件中执行make
  • spring mvc 中对静态资源的访问配置

    在web xml中配置spring mc servlet 对url pattern设置时 排除在spring的servlet之外
  • netty的线程池-----揭示了使用两个线程池的原因

    线程模型是Netty的核心设计 设计地很巧妙 之前项目中有一块处理并发的设计和Netty的Eventloop单线程设计类似 效果得到了实证 Netty5的类层次结构和之前的版本变化很大 网上也有很多文章写Netty的线程模型 Reactor
  • windbg+vmware双机调试配置教程及可能出现的问题

    一 设备参数说明 1 调试机 物理机windows 10 windbg 10 0 22000 194 2 被调试机 虚拟机windows xp sp3 3 虚拟机软件 VMware workstation 16 1 2 二 虚拟机配置调试串
  • Python面试题整理(选择题及其答案)

    Python面试题 选择题及其答案 往期文章 Python知识点整理 完整 Python知识点整理 图文结合近三万字 史上最全 Python二级考试知识点 史上最全 Python二级考试试题汇总 史上最全 2023年Python选择题及答案
  • 学习之笔记

    Hook技术被广泛应用于安全的多个领域 比如杀毒软件的主动防御功能 涉及到对一些敏感API的监控 就需要对这些API进行Hook 窃取密码的木马病毒 为了接收键盘的输入 需要Hook键盘消息 甚至是Windows系统及一些应用程序 在打补丁
  • Matlab求解矩阵方程

    描述 使用matlab求解某个方程 方程里面的变量和参数都是矩阵形式 代码 clc clear syms x A eye 4 B eye 4 x solve A x inv A B x就是方程的解 下面是另外一种形式 和上面是等同的 cle
  • UE4学习日记——蓝图中的各种颜色代表什么

    节点类型颜色 白色 执行线 蓝色 调用的函数或事件 暗蓝色 结构体 草绿色 流程切换 绿色 纯函数 通常用于获取什么 青色 试着对象转换 紫色 函数定义 灰色 宏 红色 事件的定义 土黄色 时间轴 数据类型颜色 白色线条 执行线 程序的执行
  • XSL-FO 基础知识(三)

    基本块格式化 第 1 页 共4 页 既然您已经接触到了
  • Echarts 提示内容自定义 y轴显示中文

    提示信息 只需要重写tooltip中的formatter方法 然后按照函数进行数据处理 并返回要显示的数据即可 tooltip formatter function params var res params 0 name br 水质等级为
  • html是用来表示网上信息的符号标记语言,html标记的一般格式

    html标记的一般格式 HTML是 Hyper Text Markup Language 超文本标记语言 的缩写 用来表示网上信息的 符号标记语言 是Web文档的规范 也有人把HTML称为浏览器的母语 HTML语言内容丰富 从功能上大体可分
  • Unity 实现AR脱卡功能

    准备好普通的AR东西后 在DefaultTrackableEventHandler代码中的OnTrackingFound 函数中 第一行添加 TrackerManager Instance GetTracker Stop TrackerMa
  • Python面试准备_排序算法

    最常问的Python排序算法 1 冒泡排序 核心算法 选取每个元素 依次跟右边的元素比较 def my sort arr if not isinstance arr list return None i控制比较多少轮 最后1个元素可以不比
  • qtcpsocket调用write和read函数写数据乱码问题解决方法

    参考以下博客QTcpSocket通信乱码解决方法 http blog csdn net zouhao619 article details 7100752 qtcpsocket写中文会乱码 在写入前和读出后进行处理一下就可以正常显示 如先调
  • etcd键值操作

    etcd 删除键值 1 查询所有键值 curl http 10 0 2 255 9001 v2 keys services recursive true 2 删除键值 curl http 10 0 22 39 9001 v2 keys ke
  • 在 Win10 中加快微软账户登录速度的解决方案

    修改DNS即可
  • 2022年中职组网络安全国赛A模块解析第二套

    2022年全国职业院校技能大赛 中职组 网络安全竞赛试题 2 总分100分 赛题说明 一 竞赛项目简介 网络安全 竞赛共分A 基础设施设置与安全加固 B 网络安全事件响应 数字取证调查和应用安全 C CTF夺旗 攻击 D CTF夺旗 防御等
  • Unix_Linux_AIX_常用命令总结

    目录 Java常用知识总结 前言 常用链接 Shell 自动化 处理相关 需要使用到的命令 编码思想 编码规范 shell脚本 循环处理 1 循环小火车 2 循环cup性能 各种命令 0 cd 1 uname 2 ifconfig 3 wh
  • PHP入门-PHP OOP类的继承(构造函数;public、protected和private;self、parent、final )

    0x00 写在前面 从零学习php 最终目的实现代码审计入门 软件采用sublime text 环境使用phpstudy搭建 需要有简单的html基础和php基础 跟随流沙前辈视频学习记录 OOP编程即面对对象编程 本篇学习面向对象中的继承