当前位置: 首页 > news >正文

从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.lryc.cn/news/475735.html

相关文章:

  • openGauss数据库-头歌实验1-5 修改数据库
  • 《JVM第3课》运行时数据区
  • 阅读笔记 Contemporary strategy analysis Chapter 14
  • 2024网鼎杯青龙组wp:Crypto2
  • 能通过Ping命令访问CentOS 9 Stream,但在使用Xshell连接
  • Oracle 第19章:高级查询技术
  • Excel:vba运行时错误“7“:内存溢出错误
  • 【MyBatis源码】BoundSql分析
  • KTHREAD--InitialStack和KernelStack和TSS的esp0
  • Skia基础运用(Ubuntu环境下使用BUILD.gn)
  • Vue中props和data的优先级哪个更高?
  • springboot2.x使用SSE方式代理或者转发其他流式接口
  • consul入门教程
  • 软考:大数据架构设计
  • token无感刷新+处理并发的后端方案
  • 【系统设计】让 Java “动起来”:动态语言与静态语言的比较及 DSL 实现
  • TCP Analysis Flags 之 TCP Keep-Alive
  • mfc140u.dll丢失怎么办? mfc140u.dll文件缺失的修复技巧
  • Spring Security使用
  • CSS网页布局综合练习(涵盖大多CSS知识点)
  • 解决 Hardhat Verify 超时
  • ACIS创建各种基本体,举例说明
  • [CISCN 2019华北]PWN1-好久不见7
  • 代码随想录day16| 513找树左下角的值 、 路径总和 、 从中序与后序遍历序列构造二叉树
  • 使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二) ubuntu的下载安装
  • 书生大模型实战营(第四期)——入门岛
  • 压强随着时间的变化
  • 2024年大厂AI大模型面试题精选与答案解析
  • Linux开发讲课47--- 详解 Linux 中的虚拟文件系统
  • 全球银行常用英语