从0开始学PHP面向对象内容之(类,对象,构造/析构函数)

上期我们讲了面向对象的一些基本信息,这期让我们详细的了解一下
在这里插入图片描述

一、面向对象—类

1、PHP类的定义语法:

<?php
class className {var $var1;var $var2 = "constant string";function classfunc ($arg1, $arg2) {[..]}[..]
}
?>

2、解析:

类使用class关键字后加上类名定义
类名后的一对{}内了可以定义变量和方法
类的变量使用 var,public ,protected,private来声明,变量值可以初始化
函数定义类似于PHP的函数定义,但是函数只能通过该类及其实例化的对象访问。

3、实例:

<?php
class Site {/* 成员变量 */var $url;var $title;/* 成员函数 */function setUrl($par){$this->url = $par;}function getUrl(){echo $this->url . PHP_EOL;}function setTitle($par){$this->title = $par;}function getTitle(){echo $this->title . PHP_EOL;}
}
?>
变量$this 代表自身的对象
PHP_EOL 为换行符。

二、面向对象–创建对象

类实例化之后赋值给一个变量,这个变量就是对象
类创建后,我们可以使用 new运算符来实例化该类的对象;

1、对象创建语法:

$runoob= new Site;
$taobao= new Site;
$google= new Site;

以上代码我们创建了三个对象,三个对象各自都是独立的

2、调用成员

在实例化对象后,我们可以使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量

语法

// 调用成员函数,设置标题和URL
$runoob->setTitle( "菜鸟教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();

完整代码:

<?php
class Site {/* 成员变量 */var $url;var $title;/* 成员函数 */function setUrl($par){$this->url = $par;}function getUrl(){echo $this->url . PHP_EOL;}function setTitle($par){$this->title = $par;}function getTitle(){echo $this->title . PHP_EOL;}
}$runoob = new Site;
$taobao = new Site;
$google = new Site;// 调用成员函数,设置标题和URL
$runoob->setTitle( "菜鸟教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
?>

结果:

菜鸟教程
淘宝
Google 搜索
www.runoob.com
www.taobao.com
www.google.com

三、 构造函数、析构函数

构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

1、构造函数

我们可以通过构造函数来进行初始化变量,在上述例子中,我们需要调用 setUrl(),setTitle()对成员变量进行赋值,如果我们运用构造函数那么就可以在实例化(new)类的时候就进行赋值

语法

void __construct ([ mixed $args [, $... ]] )

实例

function __construct( $par1, $par2 ) {print "构造函数\n";//变量赋值$this->url = $par1;$this->title = $par2;
}

应用

<?php
class Site {/* 成员变量 */var $url;var $title;//构造函数function __construct( $par1, $par2 ) {$this->url = $par1;$this->title = $par2;}function getUrl(){echo $this->url . PHP_EOL;}function getTitle(){echo $this->title . PHP_EOL;}
}
//直接在实例化时传入参数
$runoob = new Site('www.runoob.com', '菜鸟教程');
$taobao = new Site('www.taobao.com', '淘宝');
$google = new Site('www.google.com', 'Google 搜索');
// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
输出:

菜鸟教程
淘宝
Google 搜索
www.runoob.com
www.taobao.com
www.google.com

2、析构函数

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

语法

void __destruct ( void )

实例

 function __destruct() {print "销毁 " . $this->name . "\n";}

应用

class Dog {  public $name;  public function __construct($name) {  $this->name = $name;  echo "小狗 " . $this->name . " 来了!";  }  /* 当脚本运行到这里时,此方法下的成员函数无法被调用,因为这个对象的生命周期已经结束,这就是析构函数 */public function __destruct() {  echo "小狗 " . $this->name . " 走了,再见!";  }  public function say() {  echo $this->name . " 汪汪汪!";  }  
}  // 创建一个对象  
$dogObj = new Dog("旺财");  
// 调用小狗的say方法  
$dogObj ->say();  
// 当脚本运行到这里,$dogObj 对象不再被使用  
// 析构函数 __destruct 会被自动调用,输出“小狗走了”的消息
总结

构造函数用于所有成员函数之前
析构函数用于所有成员函数之后

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

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

相关文章

详细记录555定时器组成和工作原理(第一篇)

目录 一、创作灵感 二、CB555的电路结构图 1、比较器C1和C2 2、三个5KΩ串联组成的分压电路 3、由与非门G1和G2组成的SR锁存器 4、G3、G4、集电极开路的放电三极管TD 三、CB555引脚功能 1、CB555引脚功能描述 2、CB555的功能表 四、CB555施密特触发器 1、施密特触发器…

Linux_02 Linux常用软件——vi、vim

vi编辑器有三种主要模式&#xff0c;每种模式的功能和用途不同&#xff1a; 一、命令模式 (Command Mode)&#xff1a; - 启动 vi 时默认进入此模式。 - 你可以在此模式下移动光标&#xff0c;输入各种命令&#xff08;如删除、复制、粘贴等&#xff09;。 yy&#xff1a;…

C#与C++交互开发系列(十八):跨进程通信之命名管道(Named Pipes)

1、前言 在 C# 和 C 应用程序之间进行数据交换时&#xff0c;命名管道&#xff08;Named Pipes&#xff09;是一种简单高效的进程间通信&#xff08;IPC&#xff09;方式。命名管道提供了可靠的双向通信通道&#xff0c;适合用于同一台机器上的跨进程通信。本文将深入介绍如何…

uniapp的video视频属性打包app后层级过高

问题&#xff1a;在使用uniapp开发APP时&#xff0c;使用video标签显示视频发现H5可以正常展示&#xff0c;但是打包到APP后&#xff0c;它的层级过高&#xff0c;把底部导航都盖住了。 官网说明&#xff1a;uni-app官网 官网给了cover-view组件或plus.nativeObj.view、subNVue…

【linux 多进程并发】0302 Linux下多进程模型的网络服务器架构设计,实时响应多客户端请求

0302 多进程网络服务器架构 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 一、概…

SQLI LABS | Less-26 GET-Error Based-All Your SPACES And COMMENTS Belong To Us

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-25/ 本关考察…

XML标记语言

最近在学XXE-XML外部实体注入漏洞时候&#xff0c;浅浅学习了一下XML&#xff0c;谨做此学习笔记。 目录 一&#xff1a;XML概述 二&#xff1a;XML语法 XML中的CDATA 三&#xff1a;使用PHP解析XML文档 添加节点 四&#xff1a;Xpath语言 绝对查找 相对查找 使用*匹配…

详解:模板设计模式

模板设计模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;在软件设计中有着广泛的应用&#xff0c;旨在提高代码的可维护性和可复用性。 一、定义与特点 定义&#xff1a; 模板设计模式定义了一个算法的骨架&#xff0c;将某些步骤推迟到子类中实…

《向量数据库指南》——RAG质量评估与监控,打造高效AI引擎

嘿,各位向量数据库的小伙伴们,我是你们的老朋友王帅旭,大禹智库的向量数据库高级研究员,也是那本被大家津津乐道的《向量数据库指南》的作者。今天咱们来聊聊一个特别重要但又经常被忽视的话题——质量评估与监控,这可是确保咱们RAG(检索增强生成)系统稳定高效运行的关键…

Verilog HDL基础

模块的基本结构 module 模块名(端口列表); // 模块声明// 端口定义input [数据类型] [位宽] 输入端口列表; output [数据类型] [位宽] 输出端口列表; inout [数据类型] [位宽] 双向端口列表; // 数据类型定义wire [位宽] 线网名,线网名&#xff0c;…; …

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中&#xff0c;我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页&#xff0c;逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目&#xff0c;这是一个循序渐进的过程&#xff0c;适合初学者和有一定开发经验的工程师参考。 1. 项目背景…

SpringBoot+FileBeat+ELK8.x版本收集日志

一、准备环境 1、ElasticSearch&#xff1a;8.1.0 2、FileBeat&#xff1a;8.1.0 3、Kibana&#xff1a;8.1.0 4、logstach&#xff1a;8.1.0 本次统一版本&#xff1a;8.1.0,4个组件&#xff0c;划分目录&#xff0c;保持版本一致。 说明&#xff1a;elasticsearch和kib…

UML介绍-不同类间关系

目录 不同的类间关系有着各自独特的体现方式。 继承关系 实现关系 关联关系 聚合关系 组合关系 数据库建模PowerDesigner UML&#xff08;Unified Modeling Language&#xff09;即统一建模语言&#xff0c;是一种用于软件系统分析、 设计和文档编制的可视化建模语言。…

C语言 | Leetcode C语言题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; typedef struct {int* pre;int preSize;int total; } Solution;Solution* solutionCreate(int* w, int wSize) {Solution* obj malloc(sizeof(Solution));obj->pre malloc(sizeof(int) * wSize);obj->preSize wSize;obj->total…

Yocto 项目中 layer.conf 文件的基本框架与模版

一个在layer.conf文件的基本框架&#xff1a; # 层的名称&#xff0c;可自定义&#xff0c;用于标识该层 LCONF_VERSION "7" LAYERNAME "my_layer"# 层的优先级&#xff0c;整数&#xff0c;用于确定层在构建顺序中的位置 # 数字越大&#xff0c;优先级…

计算机毕业设计Hadoop+大模型地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Spark 机器学习 深度学习 Flink 大数据

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (1) - 让 OpenGLES 应用跑起来

在正式移植 AWTK 之前&#xff0c;我们先尝试在 HarmonyOS 上运行一个简单的 OpenGLES 应用程序。虽然可以确定这一步肯定是可行的&#xff0c;但是作为一个 HarmonyOS NEXT 新手&#xff0c;还是先从简单的应用程序开始&#xff0c;把坑都踩一遍&#xff0c;遇到问题比较好解决…

Node.js:内置模块

Node.js&#xff1a;内置模块 Node.jsfs模块读取文件写入文件__dirname path模块路径拼接文件名解析 http模块创建服务 Node.js 传统的JavaScript是运行在浏览器的&#xff0c;浏览器就是其运行环境。 浏览器提供了JavaScript的API&#xff0c;以及解析JavaScript的解析引擎&a…

《Web性能权威指南》-WebRTC-读书笔记

本文是《Web性能权威指南》第四部分——WebRTC的读书笔记。 第一部分——网络技术概览&#xff0c;请参考网络技术概览&#xff1b; 第二部分——无线网络性能&#xff0c;请参考无线网络性能&#xff1b; 第三部分——HTTP&#xff0c;请参考HTTP&#xff1b; 第四部分——浏览…

vscode ssh连接autodl失败

autodl服务器已开启&#xff0c;vscode弹窗显示连接失败 0. 检查状态 这里的端口和主机根据自己的连接更改 ssh -p 52165 rootregion-45.autodl.pro1. 修改config权限 按返回的路径找到config文件 右键--属性--安全--高级--禁用继承--从此对象中删除所有已继承的权限--添加…