① php中常用的魔术方法有哪些
php规定以两个下划线__开头的方法都保留为魔术方法,建议自定义函数的函数名最好避开。
__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
② php中怎么使用call
__call是php语言里的一个魔术方法,其作用是:当调用的方法不存在时会自动调用这个方法。
语法:
function__call(string$function_name,array$arguments)
{
宏瞎......
}
该方握绝祥法有两个参数,第一个参数$function_name会自动接收不存在的方法名,第二个$args则以数组的方段搏式接收不存在方法的多个参数。
在类里面加入:
function__call($function_name,$args)
{
echo"你所调用的函数:$function_name(参数:<br/>";
var_mp($args);
echo")不存在!";
}
当调用一个不存在的方法时(如test()方法):
$p1=newPerson();
$p1->test(2,"test");
输出的结果如下:
你所调用的函数:test(参数:
array(2){
[0]=>int(2)
[1]=>string(4)"test"
}
)不存在!
③ 谁能用比较通俗的语言解释一下php类中的构造函数,他的作用以及为什么会存在
从php5以后乱蚂的版本,php的类就可以使用魔术方法了。
php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。
PHP中的魔术方法有 :__construct,__destruct,__get, __set等
__get、__set这两个方法是为在类和他们的父类中没有声明的属性而设计的。
__get( $property ) 当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名
__set( $property, $value ) 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值
这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。
在php语言中,类构造器有两种方法,一种是使用__construct,另一种是使用与类同名的方法。
__construct 构造方法,当一个对象创建时调用此方法,相对于PHP4使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的哗搜埋名称时,就漏雹不需要改变构造方法的名称。
④ php 中的魔术函数都有哪些
魔术函数1。__construct()
实例化对象时被调用,
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。2。__destruct()
当删除一个对象或对象操作终止时被调用。3。__call()
对象调用某个方法,
若方法存在,则直接调用;
若不存在,则会去调用__call函数。4。__get()
读取一个对象的属性时,
若属性存在,则直接返回属性值;
若不存在,则会调用__get函数。5。__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。6。__toString()
打印一个对象的时被调用。如echo $obj;或print $obj;7。__clone()
克隆对象时被调用。如:$t=new Test();$t1=clone $t;8。__sleep()
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。9。__wakeup()
unserialize时被调用,做些对象的初始化工作。10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)。11。__unset()
unset一个对象的属性时被调用。如:unset($c->name)。12。__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。魔术常量1。__LINE__
返回文件中的当前行号。2。__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。3。__FUNCTION__
返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。4。__CLASS__
返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。5。__METHOD__
返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
(1)初识魔术方法
Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。
⑤ PHP5中魔术方法函数有哪几个,请举例说明各自
网页链接
__construct()//类每次实例化的时候调用
__destruct()//类释放资源的时候调用
__call()//$this->method() method不存在的时候调用
__callStatic()//new test()::method()method不存在的时候调用
_get()//获取不可访问的类内部变量调用。包括盯慧private protected 和不存在的时候
__set()///赋值不可访圆哗问的类凯腔答内部变量调用。包括private protected 和不存在的时候
__isset()//判断不可访问的类内部变量调用
__unset()//删除不可访问的类内部变量调用
__sleep()//序列化类的时候调用serialize(new teset)
__wakeup()//反序列化的时候调用unserialize(new teset)
__toString()// 字符串的方式调用类 echo new test();
__invoke()//函数方式调用类test(2);
__set_state()//var_export(类)调用
__clone()//克隆的时候调用$obj2=clone$obj;
__debugInfo//var_mp(new test())调用
⑥ php中以双下划线打头的作用是什么求高手,有木有
这肢扮是在某个历漏灶特定时间执行的方法(函数),比如你说的__autoload是自动加载类的方法,是需要用到某个类的时候就加载,还有比如__construct是对象在实例化的瞬间调用的方法。还有很多__isset __destruct等等。有两个下划线的都是在每个特定搜帆时候执行。
⑦ PHP __get和__set魔术方法在面向对象中的使用问题
php的面向对象思想编程中声明方法有三种不同的权限:public protect private。
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承类调用。
private: 私有类型,只有在本类中使用。
这些权限同样可以应用在变量声明中。
__set __get 都是php的魔术方法,主要是为了用来改变类的私有属性用的。
你觉得麻烦可以将private私有的变量改为公共public变量,这个要看需求和个人对面向对象的思考。
追问 : 我想知道的是(用private封装然后用__set或者__get )和(public设置类的属性)有什么不同.都可以取值赋值.
追答 : 没什么不同的,实现的效果都一样,只是private是为了限制访问入口少一些,或者之前用private时没有考虑到有如今的调用情况,所以在加了set或get。 比较public是所有人都可以访问,private是内部人可以访问,从权限来看,private会安全一些。
⑧ PHP中function connect 有什么用
PHP中把以两个下划线__开头的方法称为魔术方法,缺姿这些方法在PHP中充当了举足轻重的作颂芹用。 魔术方法包括:
__construct(),类的构造函数
__destruct(),类的析构函数
__call(),在对象中调用一个不可访问方法时调用
__callStatic(),用静态方式中调用一个不可访问方法时调用
__get(),获得一个类的成员变量时调用
__set(),设置一个类的成员变量时调用
__isset(),当对不可访问属性调用isset()或empty()时调用
__unset(),当对不可访问属性调用unset()时被调用。
__sleep(),执行serialize()时,先会调用这个函数
__wakeup(),执行unserialize()时,先会调用这个函数
__toString(),类被当成字伏樱绝符串时的回应方法
__invoke(),调用函数的方式调用一个对象时的回应方法
__set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用
__construct()和__destruct()
构造函数和析构函数应该不陌生,他们在对象创建和消亡时被调用。例如我们需要打开一个文件,在对象创建时打开,对象消亡时关闭
<?php
class FileRead
{
protected $handle = NULL;
function __construct(){
$this->handle = fopen(...);
}
function __destruct(){
fclose($this->handle);
}
}
?>
⑨ PHP常用的几个魔术方法
Check if this entry is a directory or a file.
const size_t filenameLength = strlen(fileName);
if (fileName[filenameLength-1] == '/')
{
{
⑩ php的魔术方法
PHP的魔术方法:
1、__construct() :实例化对象时自动调用。
2、__destruct() :销毁对象或脚本执行结束时自动调用。
3、__call($name, $args) :调用对象不存在得方法时执行此函数。
4、__get() :获取对象不存在的属性时执行闹磨悔此函数。
5、__set() :设置对象不存在的液正属性时执行此函数。
6、__isset() : 检测对象的某个属性是否存在时执行此函数。
7、__unset() :销毁对象的某个属性时执行此函数。
8、__toString() :将对象当作字符串输出时执行此函数。
9、__clone() :克隆对象时执行此函数。
10、__autoload() :实例化对象时,当类不存在时,执行此函游念数自动加载类。
11、__sleep() :serialize之前被调用,可以指定要序列化的对象属性。
12、__wakeup :unserialize之前被调用,可以执行对象的初始化工作。
13、__set_state() :调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。