php面向对象

本文详细介绍了PHP中类与对象的基本概念,包括属性的访问控制(如私有、受保护和公共属性)、静态属性和方法、构造与析构函数、魔术方法等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Index{//class 类名(首字母大写)
	private $ary = array();
	var $var = '小于php5';//为兼容PHP5以前的版本,如果采用 var 	定义,则被视为公有。
	//$error = 0; //错误 属性必须定义访问控制
	public $a = 1;//公共属性 可以实例化输出 无限制
	/**受保护属性
	* 不可以实例化输出
	* 用在方法:1.本类方法可用
	*2.继承后子类方法可用
	***/
	protected $b = 2;
	/**私有属性
	*不可以实例化输出
	*用在方法:1.【只能在本类方法】可用
	*2.继承后子类方法【不可用】
	**/
	private $c = 3;
	/**静态属性
	*不需要实例化可以直接输出
	*Index::$d
	**/
	static public $d = 4;
	//调用受保护属性
	public function ff1(){
		echo '这是受保护b'.$this->b.'<br>';
	}
	//调用私有属性
	public function ff2(){
		echo '这是私有,我不能继承使用'.$this->c.'<br>';
	}	
	//静态方法下,调用静态属性,
	//在方法中调用的静态属性前面须加self,self::$静态属性
	static public function ff3(){
		echo self::$d;//在方法调用静态属性
	}	
	/**
	*用在方法:public final function x() 当子类继承时该方法不被继承
	*final class Xx 当子类继承时该类不能被继承
	**/
	public final function ff4(){
		echo "不能被继承的方法";
	}
	/**构造函数
	*1.每当实例化之后,第一步先执行构造函数
	*2.当子类继承且子类也有构造函数时,只执行子类构造函数
	*3.如果子类构造函数写上parent::__construct()则同时调用
	*4.如果构造函数成为私有方法则不能实例化,只能通过如下
	*class Car {
    private function __construct() {
        echo 'object create';
    }
    private static $_object = null;
    public static function getInstance() {
        if (empty(self::$_object)) {
            self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
        }
        return self::$_object;
    }
}
//$car = new Car(); //这里不允许直接实例化对象
$car = Car::getInstance(); //通过静态方法来获得一个实例
	*
	**/
	function __construct() {
		echo "构造函数";
	}	
	/**析构函数
	*1.每当实例化的对象,程序执行完毕之后执行该函数
	*2.当实例化的对象遭到销毁时执行
	**/	
   function __destruct() {
 		echo "析构函数";
   }	
   /**魔术方法
   *__set() 对不存在的属性赋值
  * __get()	对不存在的属性读取
   *__isset 对不存在的属性判断
   *__unset 对不存在的属性销毁
   **/   
    public function __set($key, $val) {
        $this->ary[$key] = $val;
    }
    
    public function __get($key) {
        if (isset($this->ary[$key])) {
            return $this->ary[$key];
        }
        return null;
    }
    
    public function __isset($key) {
        if (isset($this->ary[$key])) {
            return true;
        }
        return false;
    }
    
    public function __unset($key) {
        unset($this->ary[$key]);
    }
   /**魔术方法__call()
   *当调用对象中一个不存在的【方法】的时候,如果定义了__call()方法,则会调用该方法。
   **/
	 function __call( $name, $arguments )
	    {
	        echo "__call调用<br/>";
	        echo '$name为'.$name."<br/>";
	        echo ($arguments);
	    }  
   /**魔术方法__callStatic
   *当调用对象中一个不存在的【静态方法】的时候,如果定义了__callStatic方法,则会调用该方法。
   **/
	 function __callStatic( $name, $arguments )
	    {
	        echo "__callStatic调用<br/>";
	        echo '$name为'.$name."<br/>";
	        echo ($arguments);
	    }
	// echo Index::$d;//4
	//echo Index::ff3();//4
	// $Nindex = new Index();
	//echo $Nindex->a;//1
	// echo $Nindex->b;//报错
	// echo $Nindex->c;//报错
	//$Nindex->ff1();//这是受保护b2
	//unset($Nindex);
	//$Nindex->ff2();//这是私有,我不能继承使用3
	//$str = serialize($Nindex); //对象序列化成字符串	      	     
}

文章借鉴https://www.jianshu.com/p/d3edc23718fc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值