• php学习笔记[php面向对象中常用关键字与魔术方法]


    简介:这是php学习笔记------[php面向对象中常用关键字与魔术方法]的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=338759' scrolling='no'>
    <?php
    /*
     * PHP中常用的关键字
     *
     * 	final
     * 		1. final不能修饰成员属性(类中的常量不是用这个关键在)
     *
     * 		2. final只能修饰类和方法
     *
     * 		作用:
     * 			使用final修饰的类不能被子类继承
     *
     * 			使用final修饰的方法不能被子类去覆盖
     *
     * 			用来限制类不被继承,方法不被覆盖
     *
     * 	static
     * 		1.使用static可以修饰成员属性和成员方法,不能修饰
     *
     * 		2.用static修饰的成员属性,可以被同一个类的所有对象共享
     *
     * 		3.静态的数据是存在内存中的数据段(初始化静态段)
     *
     * 		4.静态的数据是在类被第一次加载时 分配到内存中的,以后在用到类时直接从数据段中获取
     *
     * 		5.什么是类被加载?只要在程序中使用到这个类(有这类名出现)
     *
     * 		注意:静态成员都要使用类名去访问,不用创建对象,不用对象去访问
     * 			类名::静态成员
     *
     * 		如果在类中使用静态成员,可以使用self代表本类类名
     * 			self::静态成员
     *
     * 		6.静态方法(static修饰),不能访问非静态的成员
     *			因为非静态的成员,必须用对象来访问,而访问内部成员使用的是$this
     *			静态方法不能使用对象来调用,也就没有对象,$this也就不能代表什么对象,非静态的成员还必须使用对象
     *			如果确定一个方法中不使用非静态成员,则可以声明为静态方法
     *
     *
     *
     *
     * 	const
     *
     * 		1.只能修饰成员属性
     *
     * 		2.普通声明常量:define('常量名','testesttest');
     *
     * 		3.在类中声明常量使用const
     *
     * 		4.命名的方式和define是一样的效果
     *
     * 		5.访问方式和static静态成员属性时一样的(在类外部使用 类名::常量,在类内部使用 self::常量)
     *
     * 		6.常量一定要在声明时就给初值
     *
     *
     * PHP中常用的魔术方法
     *
     * 	__call()
     *
     * 		作用:在调用对象中不存在的方法时就会出现错误,然后程序退出。
     *
     * 		什么时候调用:就会在调用一个对象中不存在的方法时自动调用
     *
     * 		这个方法需要两个参数
     *
     * 	__toString()
     *
     *		直接输出对象引用时自动调用,用来快速获取对象的字符串表示的最便捷的方式
     *
     * 	
     * 	对象串行化(序列化):将一个对象转为二进制串
     * 			1.将对象长时间存储在数据库或文件中时使用
     * 			2.将对象在多个PHP文件中传输时
     * 		serialize():参数是一个对象,返回来的就是串化后的二进制串
     * 		unserialize:参数就是对象的二进制串,返回来就是新生成的对象
     *
     * 	__sleep()
     * 		是在序列化时自动调用的方法
     *
     * 		作用:可以将一个对象部分串行化(序列化)
     * 			只要这个方法中返回一个数组,数组中有几个成员属性
     *
     * 	__wakeup()
     * 		是在反序列化自动调用的方法
     * 		
     * 		是对象重新诞生的一个过程(__construct(),__clone(),__wakeup())
     *
     *
     * 	__autoload()
     *		注意:其他的魔术方法都是在类中添加起作用,这是唯一一个不在类中添加的方法
     *		只要在页面中使用到一个类,只要用到类名就会自动将类名传给这个参数
     *
     *
     * 	__clone()
     * 		克隆对象使用__clone去克隆
     *
     * 		原本(原来的对象)
     *
     * 		副本(复制出来的对象
     *
     * 		__clone()就是在克隆对象时自动调用的方法
     * 		
     * 		作用:
     *
     * 			只要一个对象一诞生,就要有初始化的动作,和构造方法作用相似
     * 			在__clone()方法中的$this关键字,代表的是副本的对象,$that代表原本的对象
     *
     *
     *
     *
     *
     */
    class Person{
    	var $name;
    	var $age;
    	var $sex;
    	const HOST="localhost";//类中声明常量
    	var static $country="China";//使用static,静态的成员属性
    
    	function __construct($name,$age,$sex){
    		$this->name=$name;
    		$this->age=$age;
    		$this->sex=$sex;
    
    		echo "###############";
    	}
    
    	//静态的方法
    	static function test(){
    		echo "test test test <br>";
    	}
    
    	function __call($methodName,$args){
    		echo "调用的方法{$methodName}(参数:";
    		print_r($args);
    		echo ")不存在";
    	}
    
    	function __toString(){
    		return "{$this->name}1111111111122222<br>";
    	}
    	
    	//克隆对象时自动调用
    	function __clone(){
    		$this->name="副本";
    	}
    
    	
    	//此方法不能被覆盖
    	final public function say(){
    		echo "我的名字:{$this->name},我的年龄{$this->age}:,我的性别:{$this->sex}<br/>";
    	}
    
    	protected function eat(){
    
    		echo "wwwwwwwwwwwwwwwwwwwww<br>";
    
    	}
    
    	function run(){
    		echo self::HOST;//类内部访问常量
    	}
    	protected $name
    	protected $age;
    	protected $sex;
    }
    
    
    class Student extends Person{
    	var $school;
    
    	function __construct($name,$age,$sex,$school){
    		parent::__construct();
    		$this->school=$school;
    	}
    
    
    	protected function say(){
    	
    		parent::say();
    
    		echo "我所在的学校{$this->school}<br/>";
    	}
    
    	function study(){
    		echo "{$this->name}在学习<br/>";
    	}
    
    }
    
    echo Person::$country;//访问静态成员
    echo Person::HOST;//外部访问常量
    $p=new Person();
    echo $p;//会自动调用__toString()
    
    $p1=clone $p;//克隆
    
    
    //__autoload使用
    function __autoload($className){//每次使用类名都会调用此函数,并把类名传给参数
    	include "./".$className.".class.php";
    }
    
    
    ?>

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/338759.html pageNo:8
  • 相关阅读:
    通过构造函数检查生成对象个数
    动手动脑二
    产生随机数的几种方法
    素数输出
    递归实现回文串
    java的方法重载
    统计单词频率
    四则运算和随机验证码
    微信小程序--家庭记账本开发--04
    微信小程序--家庭记账本开发--03
  • 原文地址:https://www.cnblogs.com/ooooo/p/2246212.html
Copyright © 2020-2023  润新知