PHP: 分享5个最近常用的魔术方法

1.__construct()

如英文意思,就是构造函数。这个跟普通的构造函数的区别在于,不用每次都定义一个与类名同名的函数作为构造函数。

class Model{
    private $param =null;
    public function __construct($param){    //构造函数
        $this->param =$param;
    }
}

2.__call($funcName, $params)

是在实例调用类中未定义的函数时触发的函数

class Model{
    //$funcName: 未定义函数名
    //$params(数组): 未定义函数的参数
    __call($funcName, $params){    
        //我这里没有用到$params
        return "the function: $funcName is not exist!"
    }
}
$model =new Model();
$model->func();  //函数func不存在,就会触发__call

3.__get($name)

用来调用类中的非公有属性:

class Model{
    private host ="http://localhost";
    public function __get($name){
        return $this->$name;
    }
}

$model =new Model();
echo $model->host;    //访问私有属性

4.__set($name, $value)

和__get方法相对应,用来给非公有属性的赋值

class Model{
    private host =null;
    public function __set($name, $value){
        $this->$name =$value;
    }
}

$model =new Model();
$model->host ="http://localhost";    //给私有属性赋值

5.__autoload()

这个是用来引入类文件的,一般我们是用include、include_once、require、require_once来引入文件的

但是如果我们要引入多个文件,就要写当好的引入语句,这样既不方便又不美观,__autoload可以解决这个问题

,他最大的好处是他的懒惰属性,实例化对象的时候才会引入对应的类文件。

//比如我的Model类文件Model.class.php 在当前目录的上一层目录下的Model/Model.class.php(其实就是引入
//类文件的路径)
function __autoload($className) {    //$className就是类名
    $filename = "../Model/". $className .".class.php";    //组合路径
    require_once "$filename";    //引入类文件
}
//只要一实例化对象就会触发这个函数

$model =new Model();    //这么一句话就触发了__autoload(其实原理想想也明白)

//在继承中,__aotoload也是有效
function __autoload($className) {    //$className就是类名
    $filename = "../Model/". $className .".class.php";    //组合路径
    require_once "$filename";    //引入类文件
}
class Child extends Father{
    
}

//在继承中,也会自动引入父类的类文件

 

转载于:https://my.oschina.net/u/2487410/blog/657068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值