zoukankan      html  css  js  c++  java
  • PHP学习4——面向对象

    主要内容:

    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)

  • 相关阅读:
    [问题2014S12] 复旦高等代数II(13级)每周一题(第十二教学周)
    [问题2014S09] 解答
    [问题2014S11] 复旦高等代数II(13级)每周一题(第十一教学周)
    [问题2014S08] 解答
    [问题2014S10] 复旦高等代数II(13级)每周一题(第十教学周)
    [问题2014S07] 解答
    [问题2014S09] 复旦高等代数II(13级)每周一题(第九教学周)
    [问题2014S08] 复旦高等代数II(13级)每周一题(第八教学周)
    怎么解决tomcat占用8080端口问题图文教程
    MySQL中删除重复数据只保留一条
  • 原文地址:https://www.cnblogs.com/1906859953Lucas/p/9428733.html
Copyright © 2011-2022 走看看