php中的10大魔术方法
2017-04-06 16:12
246 查看
__set:设置私有属性值的时候调用
__construct:构造方法
__destruct:析构方法
__unset
触发时机:当销毁一个私有成员属性的时候调用
参数:属性名
__isset
触发时机:当判断一个私有成员属性是否被设置过时调用
参数:属性名
__invoke(了解)
触发时机:当将一个对象当作函数使用的时候被调用
参数:任意多个,调用时传递多少个这里就写多少个
__toString(了解)
触发时机:当echo一个对象的时候调用
参数:没有参数
返回值:返回一个字符串,该字符串就会被打印出来,这个字符串需要自己定制
__debugInfo(了解)
触发时机:当var_dump来打印这个对象的时候调用
参数:没有参数
返回值:返回一个自定义的数组,你想打印什么就打什么
__call
触发时机:当调用一个不存在的成员方法的时候触发
参数:方法名参数数组
__callStatic(讲完静态方法时候再讲)
$this->成员属性:在类里面访问自己的成员属性和方法。
public:公共的,在类内和类外都可以直接访问
private:私有的一般在类外不能访问。
2.魔术方法:
(1)__unset():用unset销毁一个私有的成员属性的时候调用,参数:属性名。<?php
classCat
{
public$nmae;
private$age;
private$height;
publicfunction__construct($name,$age,$height)
{
$this->name=$name;
$this->age=$age;
$this->height=$height;
}
publicfunctionmiao()
{
echo'miaomiao';
}
publicfunction__unset($arg)
{
echo$this->$arg.'被销毁了';
}
}
$bosi=newCat('波斯猫',10,20);
unset($bosi->age);
(2)__isset():当判断一个私有的成员属性是否被设置时调用,参数:属性名。
<?php
classCat
{
.......
publicfunction__isset($arg)
{
returnisset($this->$arg);
}
}
isset($bosi->age);
(3)__invoke:当将一个对象当做函数时被调用,参数任意多个,调用时传递多少个这里就写多少个。
<?php
classDog
{
public$name='wang';
publicfunctionwangwang()
{
echo'旺旺';
}
publicfunction__invoke($a,$b,$c)
{
echo'将对象作为函数使用了';
}
}
$tai=newDog();
$tai(100,200,300);
(4)__toString:当echo一个对象的时候调用,这个函数里面返回什么字符串echo的时候就打印出什么。没有参数,但是有返回值,返回一个字符串,该字符串需要自己定制。
<?php
classDog
{
......
publicfunction__toString()
{
return'我的姓名是'.$this->name;
}
}
$tai=newDog();
echo$tai;
(5)__debugInfo():触发时机:当使用var_dump()打印对象的时候会调用。返回一个自定义的数组,数组里面是需要打印的东西,没有参数。
<?php
classDog
{
......
publicfunction__debugInfo()
{
return['name','age'];
}
}
$tai=newDog();
var_dump($tai);
(6)__call():调用不存在的成员方法时会自动调用该方法。参数:方法名,参数数组。
<?php
classDog
{
.......
function__call($name,$args)
{
var_dump($name);//函数名
var_dump($args);
}
}
$tai=newDog();
$tai->eat(100,100);
(7)__callStatic():调用不存在的静态方法时
3.连贯操作(链式操作):
数据库操作类查询的时候有很多条件:$model->limit()->where()->filed()->table()->select()
<?php
classModel
{
functionfiled()
{
return$this;
}
functionlimit()
{
return$this;
}
....
functionselect()
{
//返回查询结果。
}
}
4.通过__call实现单字段的查询:
<?php
function__call($name,$args)
{
$str=substr($name,0,5);
if($str=='getBy'){
$filed=
}
}
未完待续
5.继承:
(1)继承:考虑的是从相同的属性来理解,子类的特征一般多于父类。派生:其实和继承描述的是同一个东西,但是从两个不同的方面来理解的,继承考虑的是相同的属性来考虑的,派生是从不同的属性来理解的。
父子类的叫法:父类(基类)、子类(派生类)
单继承:php是单继承的,子类只能有一个父类。
(2)继承的基本语法:
在代码中子类如果继承父类,那么就拥有父类的属性和行为(某些访问控制除外)。
<?php
classFather
{
public$name='翠花';
public$age=18;
public$height=160;
functioneat()
{
echo'大口吃饭';
}
functionsleep2()
{
echo'睡觉觉';
}
}
classSonextendsFather
{
}
$hua=newSon();
$hua->sleep2();
6.访问权限:
public:公共的,类外类内都可以直接访问private:私有的,类外不可以直接访问
protected:受保护的,类外不可直接访问,类内可以
<?php
classGirl
{
public$name='刘亦菲';
private$age=18;//私有的不能被继承
protected$weight=90;//可以被继承
functionsay()
{
echo'我叫'.$this->name;
}
}
classdaughterextendsGirl
{
functiontest()
{
echo'我叫'.$this->name;
}
}
$liu=newdaughter();
$liu->test();
7.静态属性和静态方法
静态属性是属于整个类的,而不是属于某个对象的静态方法的调用
注意事项:(1)静态方法中不能出现$this关键字,
$this是属于某个对象的,但是该静态方法是属于整个类的而不是属于某个对象的。
(2)静态属性和方法前面可以加属性修饰符。
(3)使用静态属性和方法可以提高效率,通过类名就可以使用里面的属性和方法。
(4)可以实现单例(单一实例)
<?php
类外调用---》类名::静态方法名();
类内调用---》$this::方法名();
8.自动加载
规则:一个类就是一个文件,文件名要和类名相同。__autoload:当在当前脚本中去加载一个不存在的类的时候会调用这个方法。
当加载一个类,这个类继承了其他的类,只要找不到就可以调用__autoload(),参数就是要加载的类名。
M:model模型和数据库打交道
V:View视图,html文件(模板)
C:controller控制器(数据和模板之间的桥梁)
注意:这个方法是唯一的一个写在类外的方法。
<?php
classCar
{
public$name;
public$money;
public$speed;
functionrun()
{
echo'汽车在高速上面跑';
}
}
<?php
function__autoload($name)//$name就是类名
{
echo'我被调用了';
$fileName=$name.'.php';
include$fileName;
}
//include'Car.php';
//自动加载
$bmw=newCar();
$bmw->run();
目录结构(文件夹)结构:
model存放数据库文件
view存放界面视图文件
controller存放控制器文件
vendor:第三方的库文件
入口文件:index.php(mvc下面)
相关文章推荐
- 讲讲php的魔术方法
- php魔术方法
- PHP 5魔术方法应用浅析
- php 魔术方法使用说明详细
- php 魔术方法
- php的魔术方法
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr
- PHP下划线函数即魔术方法汇总
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __uns
- PHP中用魔术方法__autoload()实现类的自动加载
- 有了PHP 5.3的__callStatic魔术方法,就可以做按类名和方法名同时魔术了
- php魔术方法
- php魔术方法和魔术变量
- 腾讯php面试题总结(一) 15个魔术方法的总结
- PHP中的魔术方法总结
- php 魔术方法使用说明
- PHP中的魔术方法总结 :__construct,__destruct ,__call,__callStatic,__get,__set,__isset,__unset,__sleep,__wakeup, __toString.......
- PHP中的魔术方法总结[__construct/__destruct/__get/__set/__isset/__unset/__toString/__clone等]
- php魔术方法和魔术变量、内置方法和内置变量
- PHP魔术方法