PHP学习4——面向对象

简介: 主要内容:创建类成员方法构造方法析构方法封装继承接口多态静态成员常用关键字常用魔术方法 从PHP5开始引入了面向对象的全部机制,面向对象的特性符合软件工程的3个目标:重用性,灵活性,扩展性。

主要内容:

  1. 创建类
  2. 成员方法
  3. 构造方法
  4. 析构方法
  5. 封装
  6. 继承
  7. 接口
  8. 多态
  9. 静态成员
  10. 常用关键字
  11. 常用魔术方法

 

从PHP5开始引入了面向对象的全部机制,面向对象的特性符合软件工程的3个目标:重用性,灵活性,扩展性

创建类

类前面不用public修饰,只要class,类的属性不能在初始化赋值(除非你写了构造方法来初始化赋值),属性的使用符号->,比如$aClass->name;

demo.php

<?php
	//声明ren类,默认public,不写
	class ren{
		public $name;
		public $sex;
		public $age;
	}
	//实例化ren类
	$xiaoli=new ren();
	//设置name属性
	$xiaoli->name="小李";
	//获取name属性
	echo $xiaoli->name;
	
?>

  输出

=》小李

 成员方法

就是类中函数,只是在原先的函数声明前面加修饰符public,即可,调用方法$aClass->func(),在函数中使用该对象的属性使用关键字$this,比如$this->name;

class_func.php

<?php
	//声明ren类,默认public,不写
	class ren{
		public $name;
		public $sex;
		public $age;
		public function say(){
			echo "我叫做".$this->name."<br/>";
		}
	}
	//实例化ren类
	$xiaoli=new ren();
	//设置name属性
	$xiaoli->name="小李";
	//调用方法
	$xiaoli->say();
	
?>

  输出

我叫做小李

构造方法

在类的方法中的一个特殊的方法,默认为public(不需要写),,写法:__construct(){},注意前面是2个下划线。

可以使用构造方法进行对象的初始化赋值

每一次实例化对象(new),都会执行。

construct.php

<?php
	//声明ren类,默认public,不写
	class ren{
		public $name;
		public $sex;
		public $age;
		//成员方法
		public function say(){
			echo "我叫做".$this->name."<br/>";
			echo "性别:".$this->sex."<br/>";
			echo "年龄:".$this->age."<br/>";
		}
		//构造方法
		function __construct($name,$sex,$age){
			$this->name=$name;
			$this->sex=$sex;
			$this->age=$age;
		}
	}
	//实例化ren类,初始化对象赋值
	$xiaoli=new ren("小李","男",25);

	//调用方法
	$xiaoli->say();
	
?>

  输出

我叫做小李
性别:男
年龄:25

析构方法

和构造方法名称类似,但是不能带任何参数,写法:function __destruct(){}

在销毁一个类之前执行一些操作或完成功能,在对象被销毁时自动执行。

destruct.php

<?php
	//声明ren类,默认public,不写
	class ren{
		public $name;
		public $sex;
		public $age;
		//成员方法
		public function say(){
			echo "我叫做".$this->name."<br/>";
			echo "性别:".$this->sex."<br/>";
			echo "年龄:".$this->age."<br/>";
		}
		//构造方法
		function __construct($name,$sex,$age){
			$this->name=$name;
			$this->sex=$sex;
			$this->age=$age;
		}
		//析构方法
		function __destruct(){
			echo "<br/>$this->name 这个对象被销毁了。<br/>";
		}
	}
	//实例化ren类,初始化对象赋值
	$xiaoli=new ren("小李","男",25);

	//调用方法
	$xiaoli->say();
	
	//对象自动销毁,执行__destruct
	
?>

  输出

我叫做小李
性别:男
年龄:25

小李 这个对象被销毁了。

  也可以使用unset方法手动销毁对象,比如$unset($xiaoli)

unset.php

<?php
	//声明ren类,默认public,不写
	class ren{
		public $name;
		public $sex;
		public $age;
		//成员方法
		public function say(){
			echo "我叫做".$this->name."<br/>";
			echo "性别:".$this->sex."<br/>";
			echo "年龄:".$this->age."<br/>";
		}
		//构造方法
		function __construct($name,$sex,$age){
			$this->name=$name;
			$this->sex=$sex;
			$this->age=$age;
		}
		//析构方法
		function __destruct(){
			echo "<br/>$this->name 这个对象被销毁了。<br/>";
		}
	}
	//实例化ren类,初始化对象赋值
	$xiaoli=new ren("小李","男",25);
	$xiaobai=new ren("小白","女",23);
	//调用方法
	unset($xiaoli,$xiaobai);
	
	//对象自动销毁,执行__destruct
	
?>

  输出

小李 这个对象被销毁了。

小白 这个对象被销毁了。

  

封装

面向对象的3特性:封装,继承,多态

封装是面向对象的3特性之一(3特性为:封装,继承,多态)

类封装了代码,对象则封装了数据

访问关键字:public,private,protected

继承

这也是面向对象的3特性之一

继承使用的关键字为extends

继承可以拓展原先的类的属性和方法,还可以直接使用原先的类的属性和方法,节省了一大推敲代码的时间!

不过继承的是public,protected的属性和方法,至于private乃是师傅的私家珍藏(俗称“留一手”),是不会让继承的!

PHP的面向对象的设计,和Java语言的设计非常的类似,难道是copy“借鉴”了Java的吗?也许吧!

jicheng.php

<?php
	//声明tool类
	class tool{
		function on(){
			echo "<br/>启动<br/>";
		}
		function run(){
			echo "运行<br/>";
		}
		function off(){
			echo "关闭<br/>";
		}
	}
	//继承tool类
	class fan extends tool{
		function app(){
			$this->on();
			$this->run();
			$this->off();
		}
	}
	$fan=new fan();
	$fan->app();
	
?>

  输出

启动
运行
关闭

  

接口

PHP5也是单继承的,只能extends一个类,但是可以实现(相当于继承)多个接口(接口相当于是所有方法都是抽象方法,抽象类)

接口的关键字interface,实现接口implements

interface.php

<?php
	//声明接口
	interface tool{
		//全都是默认的public abstract 的方法
		function on();
		function run();
		function off();
	}
	//实现接口
	class fan implements tool{
		function on(){
			echo "<br/>风扇启动<br/>";
		}
		function run(){
			echo "风扇运行<br/>";
		}
		function off(){
			echo "风扇关闭<br/>";
		}
	}

	
?>

多态

由于PHP是弱类型语言,并不支持完全的多态。

多态就是根据不同的对象来做出不同的反应,运行同一个方法,但是得到的却是不同的结果。

duotai.php

<?php
	//声明接口
	interface tool{
		//全都是默认的public abstract 的方法
		function on();
		function run();
		function off();
	}
	//实现接口
	class fan implements tool{
		function on(){
			echo "<br/>风扇启动<br/>";
		}
		function run(){
			echo "风扇运行<br/>";
		}
		function off(){
			echo "风扇关闭<br/>";
		}
	}
	//实现接口
	class engine implements tool{
		function on(){
			echo "<br/>发动机启动<br/>";
		}
		function run(){
			echo "发动机运行<br/>";
		}
		function off(){
			echo "发动机关闭<br/>";
		}
	}
	//状态类
	class toolStatus{
		function ts($tool){
			$tool->on();
			$tool->run();
			$tool->off();
		}
	}
	
	
	//应用多态
	$fan=new fan();
	$engine=new engine();
	
	$toolStatus=new toolStatus();
	$toolStatus->ts($fan);
	$toolStatus->ts($engine);
	
?>

  输出

风扇启动
风扇运行
风扇关闭

发动机启动
发动机运行
发动机关闭

静态成员

类中一种特殊成员,不会被实例化到对象中,所以不用实例化对象即可调用。

关键字static,比如public static $name,public static function say(){};

在类的内部使用静态的成员使用关键字self::$name,self表示类,2个冒号是作用域限定符,$name就是静态成员。

在程序中使用静态成员,写法:

static.php

<?php
	//声明tool类
	class tool{
		//声明静态方法
		static function on(){
			echo "<br/>启动<br/>";
		}
		function run(){
			//内部调用静态方法
			self::on();
			echo "运行<br/>";
		}
		function off(){
			echo "关闭<br/>";
		}
	}

	//外部调用静态方法,不用实例化对象
	tool::on();
	$fan=new tool();
	$fan->run();
	
?>

  输出

启动

启动
运行

 常用关键字

final,被final(最终的)修饰的类不能被继承,修饰的属性不能被修改,比如public final function say(){}

clone,建立一个对象的副本,比如$newClass=clone $aClass;他会自动调用类的__clone(){}方法

常用的魔术方法

function  __construct($name,$age){}构造方法

function __destruct(){}析构方法

function __clone(){}拷贝方法

function __set($name,$value)设置方法

function __get($name)获取方法

function __call($func,$values)

function static __callStatic($func,$values)

 

目录
相关文章
|
2月前
|
PHP
PHP编程中的面向对象和面向过程
【8月更文挑战第28天】在PHP编程中,我们可以选择面向对象或面向过程的编程方式。面向对象的编程方式更符合人类习惯,易于理解,提高程序的重用性,减少代码出错率;而面向过程的编程方式则强调的是功能行为,以具体的功能实现为主。
|
2月前
|
设计模式 数据库连接 PHP
PHP编程中的面向对象与设计模式
在PHP编程世界中,掌握面向对象编程(OOP)和设计模式是提升代码质量和开发效率的关键。本文将深入浅出地介绍如何在PHP中应用OOP原则和设计模式,以及这些实践如何影响项目架构和维护性。通过实际案例,我们将探索如何利用这些概念来构建更健壮、可扩展的应用程序。
|
2月前
|
设计模式 测试技术 PHP
使用PHP进行面向对象网站开发的最佳实践
【8月更文第10天】PHP 是一种广泛使用的开源服务器端脚本语言,特别适合于 Web 开发并可嵌入 HTML 中。随着 PHP 5.x 和 7.x 版本的发展,它已经完全支持面向对象编程(OOP)。面向对象的设计模式和原则可以帮助开发者构建更加模块化、可扩展且易于维护的应用程序。
40 6
|
12天前
|
Java PHP 数据安全/隐私保护
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
本文详细介绍了PHP面向对象编程的一系列核心概念和用法,包括构造函数、析构函数、继承、方法重写、访问控制、接口、抽象类、静态成员、final关键字、以及this、self、parent这三个关键字的异同和作用。通过具体示例代码,展示了如何在PHP中使用这些面向对象的特性,以及它们在实际开发中的应用。
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
|
2天前
|
PHP 开发者
PHP编程中的面向对象基础
【9月更文挑战第36天】在PHP的世界中,面向对象编程(OOP)是一块基石。它不仅为代码带来了结构、可维护性与重用性,还让复杂的问题变得简单化。通过掌握类与对象、继承与多态等核心概念,开发者可以构建出更加强大和灵活的应用。本文将引导你理解这些概念,并通过实例展示如何在PHP中应用它们,让你轻松驾驭OOP的力量。
|
11天前
|
PHP 开发者
PHP编程中的面向对象基础与实践
【9月更文挑战第27天】在PHP的海洋里,面向对象编程(OOP)是一艘强大的船,它不仅能让代码组织得更加优雅,还能提高开发效率。本文将带你领略OOP的魅力,从基础概念到实际应用,让你轻松驾驭这艘船,开启高效编程之旅。
|
19天前
|
数据库连接 PHP 开发者
PHP编程中面向对象与面向过程的比较
【9月更文挑战第19天】本文旨在探讨PHP编程语言中的两种主要编程范式:面向对象编程(OOP)和面向过程编程。我们将通过对比这两种方法的特点、使用场景及其优缺点,帮助读者更好地理解在PHP开发中如何选择合适的编程模式。文章还将提供一些实际代码示例,以便更直观地展示两种编程方式的差异。
|
12天前
|
存储 PHP 开发者
PHP编程中的面向对象基础
【9月更文挑战第26天】在PHP的编程世界中,掌握面向对象的编程思维是提升代码质量和开发效率的关键。本文将带你走进PHP的对象世界,探索类和对象的概念、属性和方法的应用,以及继承和多态性的强大功能。通过深入浅出的讲解和实际代码示例,让你轻松理解并运用这些概念,为你的PHP编程之旅增添翅膀。
|
1月前
|
IDE 关系型数据库 PHP
php语言学习
【9月更文挑战第1天】php语言学习
30 3
|
2月前
|
PHP 开发者
PHP编程中的面向对象基础
【8月更文挑战第30天】在PHP编程的世界里,面向对象编程(OOP)是一块重要的基石。它不仅为开发者提供了一种组织代码的方式,还让复杂的问题变得简单化。本文将深入浅出地探讨PHP中面向对象编程的核心概念,包括类和对象的创建、继承、封装以及多态性的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的指导和启示。