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

从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.kler.cn/a/376729.html

相关文章:

  • Fooocus图像生成软件本地部署教程:在Windows上快速上手AI创作
  • SpringMVC笔记 一万字
  • 利用EasyExcel实现简易Excel导出
  • 常见的开源软件许可证及其应用案例
  • C++ typedef 和 using
  • Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶
  • npm入门教程9:npm配置
  • Python爬虫:揭开淘宝商品描述的神秘面纱
  • 逼着自己深度思考
  • 四款主流的3D创作和游戏开发软件的核心特点和关系
  • 前端 javascript 存储数据的方式有哪些
  • 归并排序速记
  • python 数据结构 2
  • 【云原生】云原生后端:数据管理
  • 设计卷积神经网络CNN为什么不是编程?
  • NFT Insider #153:The Sandbox 推出 Biggie 奇妙宇宙体验,ApeChain 推出顶级交易员游戏
  • 达梦数据库-同义词简介
  • 软考:大数据架构设计
  • 【多态】析构函数的重写
  • 七、MapReduce 编程模型:原理、流程与应用场景
  • 数据结构+算法分析与设计[22-24年真题版]
  • Apache Dubbo (RPC框架)
  • 计算机毕业设计Hadoop+大模型旅游推荐系统 旅游景点推荐 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计
  • 算法深度剖析:前缀和
  • 二、Go快速入门之数据类型
  • 【Kaggle | Pandas】练习6:重命名和组合