加载和魔术方法
一、加载类
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); ?>