加载和魔术方法

一、加载类

1、require 方式

<?php
	class Ren{
		public $name;
		public $sex;	
	}
?>

上面 有一个文件名为Ren的类加载的现在的文件中

	<?php
		require("./Ren.class.php");//括号里面是路径
		$r = new Ren();
		var_dump($r);
    ?>

 

2、require_once方法

	<?php
		require_once("./Ren.class.php");
		$r = new Ren();
		var_dump($r);
    ?>

 结果是一样的  不一样的是require不能重复  重复使用会报错,require_once不会报错

<?php
		require_once("./Ren.class.php");
		require_once("./Ren.class.php");
		$r = new Ren();
		var_dump($r);
    ?>

 

	<?php
		require("./Ren.class.php");
		require("./Ren.class.php");
		$r = new Ren();
		var_dump($r);
    ?>

 

3、include方法      

  重复会报错

	<?php
		include("./Ren.class.php");
		$r = new Ren();
		var_dump($r);
    ?>

4、 include_once方法       

重复不会报错

	<?php
		include_once("./Ren.class.php");
		$r = new Ren();
		var_dump($r);
    ?>

 require方法出现错误时脚本停止运行

include方法出现错误时脚本继续运行

5、自动加载

条件:1、所有类的命名要规范 class.Ren

   2、所有的类要放在同一个文件夹下,

     3、类文件名要规范 Ren.class.php

当有好几个工具类文件时一一加载太麻烦  所以可以用自动加载

	<?php
		function __autoload($classname){
			require_once "./{$classname}.class.php";
		}
		$r = new Ren();
		$s = new Dog();
		var_dump($r);
		var_dump($s);
    ?>

 

二、魔术方法

function__construct(){

}  构造函数,对类里面的成员进行初始化

	<?php
		class Ren{
			public $name;
			public $sex;
			public function __construct($sex){
				$this->sex = $sex;
				echo "测试一下";
			}
		}
		$r = new Ren("男");
		$r->name = "张三";
		var_dump($r);

 function__destruct(){

} 析构函数,在对象释放时自动执行

	<?php
		class Ren{
			public $name;
			public $sex;
			public function __construct($sex){
				$this->sex = $sex;
			}
			public function __destruct(){
				echo "销毁";
			}//执行完name后没有可执行的 会自动销毁内容
		}
		$r = new Ren("男");
		$r->name = "张三";
    ?>

 __赋值方法

function__set(){

}

__取值方法

function__get(){

}

class Ren{
    public $name;
    public $sex;
    private $age;//public----private
    public function __set($name,$value){//$name变量名$value变量值
        if($name == "age"){
            if($value>=18&&$value<=50){
                $this->$name = $value;
            }
        }
        else{
            $this->$name = $value;
            }
    }
    public function __get($name){
        return $this->$name;
    }
}
$r = new Ren();
$r->name = "张三";
$r->age = 20;//自动调用__set
$r->age;//自动调用__get
var_dump($r)
?>

function__tostring(){

} 输出对象的方法

	<?php
		class Ren{
			public $name;
		}
		$r = new Ren();
		var_dump($r);
    ?>

 如果用echo输出会报错

	<?php
		class Ren{
			public $name;
		}
		$r = new Ren();
		echo $r ;
    ?>

 用魔术方法再用echo就没事了

	<?php
		class Ren{
			public $name;
			public function __tostring(){
				return "这是一个人类";
			}
		}
		$r = new Ren();
		echo $r;
    ?>

 function__clone(){

}克隆对象的方法

克隆

	<?php
		class Ren{
			public $name;
		}
		$r = new Ren();
		$r->name = "张三";
		$r1 = clone $r;
		var_dump($r1);
        ?>

 

对新克隆出的对象就行修改

	<?php
		class Ren{
			public $name;
			public function __clone(){
				$this->name = "李四";
			}
		}
		$r = new Ren();
		$r->name = "张三";
		$r1 = clone $r;
		var_dump($r1);
    ?>

 

 

posted @ 2018-01-09 15:38  navyyouth  阅读(124)  评论(0编辑  收藏  举报