search
Homephp教程php手册基于PHP5魔术常量与魔术方法的详解

本篇文章是对PHP5中的魔术常量与魔术方法进行了详细的分析介绍,需要的朋友参考下

魔术常量:
1。__LINE__
返回文件中的当前行号。
2。__FILE__
  返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP4.0.2 起,__FILE__总是包含一个绝对路径,美国空间,而在此之前的版本有时会包含一个相对路径。
3。__FUNCTION__
  返回函数名称(PHP4.3.0 新加)。自PHP5 起本常量返回该函数被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
4。__CLASS__
  返回类的名称(PHP4.3.0 新加)。自PHP5 起本常量返回该类被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
5。__METHOD__
  返回类的方法名(PHP5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
魔术函数:
1。__construct()
  构造函数: 实例化对象时被调用,
  当__construct和以类名为函数名的构造函数同时存在时,__construct将被调用,另一个不被调用。
4。__get()
  读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
5。__set()
  设置一个对象的属性时,
  若属性存在,则直接赋值;
  若不存在,则会调用__set函数。
6。__toString()
  打印一个对象的时被调用。如echo$obj;或print$obj;
7。__clone()
  克隆对象时被调用。如:$t=newTest();$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()
  实例化一个对象时,如果对应的类不存在,则该方法被调用。

初识魔术方法
Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。
PHP| 魔术方法|__toString(),__clone(),__call(),__autoload() 详解
__toString()
如果我有一个类:
classPerson
{
private $name = “”;
private $age = 0;
function__construct($name = “”, $age = “”)
{
$this->name =$name;
$this->age = $age;
}
functionsay()
{
echo“name:”.$this->name.”
”.”age:”.$this->age.”
”;
}
}
现在我去实例化这个类,然后去打印这个实例:
$p1= new person(“liuzy”,20);
echo $p1; //直接打印会出错
显然这样直接打印对象是会出现错误的,因为对象是引用句柄,香港虚拟主机,不能直接打印。这时,我们可以用到__toString()方法。我们在Person类里加一个__toString()方法:
function__toString()
{
return “I am Person,my name is“.$this->name.”
”;
}
然后再刷新页面,发现什么了?
现在我们明白,__toString()是在直接打印对象时执行的方法,我们可以用该方法打印类的一些相关信息。注意:是两个下划线,方法必须有返回值。
__clone()
我们知道对象是可以直接赋值的,比如
$p2= $p1; //这里是一个对象有两个引用
那么我执行:
$p1->say();
$p2->say();
是都可以执行的,而且效果一样。

我们还有一种方法:
$p3= clone $p1; //注意clone是克隆关键字,这里与上面的不同是$p3是一个新的对象。
同时我们在类里加入一个方法:
function__clone()
{
$this->name = “我是副本”; //注意:这里的$this是克隆产生的对象本身,不是当前类
}
然后我们执行:
$p3->say();
打印出:
name:我是副本
age:20
到这里我们明白,__clone()方法是在克隆对象的时候执行的方法,香港服务器,它的作用是对新克隆出来的副本进行属性初始化等操作。
__call()
这个方法的主要功能是:在该类的实例调用一个不存在的方法时,执行该__call()方法。注意需要提前在类里声明:
function__call($fname,$argus)
{
echo “你调用的方法:”.$fname.”不存在
”;
echo“参数是”.print_r($argus);
}
__autoload()
我们在平时调用一个类的时候,必须要先将该类所在的文件引入(include“xxx.php”),如果我们在一个页里调用的类很多,那么我们不得不使用许多的include“xxx.php”。显然这样很麻烦。
__autoload()方法可以帮我们解决这个问题。

比如我们将上面的那个Person类所在的文件定义为Person_class.php ,
再新建一个php文件 test.php,编辑内容:
function __autoload($calssName)
{
include $className.”_class.php”; //看到这也许你就明白了吧?哈哈
}
$p= new Person(“mifan”, 22);
$p->say();
这样执行该test.php页面就不会出现错误了。
__autoload()方法是在生命不存在的类时调用的方法,它有一个string类型的参数是声明该不存在类的类名。
当然,类文件的命名也是很有讲究的。最好是和类有关系,比如Person_class.php

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php5和php8有什么区别php5和php8有什么区别Sep 25, 2023 pm 01:34 PM

php5和php8的区别在性能、语言结构、类型系统、错误处理、异步编程、标准库函数和安全性等方面。详细介绍:1、性能提升,PHP8相对于PHP5来说在性能方面有了巨大的提升,PHP8引入了JIT编译器,可以对一些高频执行的代码进行编译和优化,从而提高运行速度;2、语言结构改进,PHP8引入了一些新的语言结构和功能,PHP8支持命名参数,允许开发者通过参数名而不是参数顺序等等。

php5如何改80端口php5如何改80端口Jul 24, 2023 pm 04:57 PM

php5改80端口的方法:1、编辑Apache服务器的配置文件中的端口号;2、辑PHP的配置文件以确保PHP在新端口上工作;3、重启Apache服务器,PHP应用程序将开始在新的端口上运行。

解密Python元编程:从基础到高阶典范解密Python元编程:从基础到高阶典范Feb 19, 2024 pm 03:30 PM

python元编程基础Python元编程是动态地操作Python代码的能力,这使得Python成为一门非常强大的语言。元编程可以通过以下几种方式实现:类装饰器:类装饰器是一种修改类定义的装饰器。它可以用来添加或修改类的属性和方法,也可以用来控制类的实例化过程。defadd_method_to_class(cls):defnew_method(self):print("Thisisanewmethod")setattr(cls,"new_method",new_method)returncls@a

php5没有监听9000端口如何解决php5没有监听9000端口如何解决Jul 10, 2023 pm 04:01 PM

php5没有监听9000端口解决方法步骤:1、检查PHP-FPM配置文件;2、重启PHP-FPM服务;3、关闭防火墙或配置端口转发;4、检查其他进程是否占用9000端口。

php7和php5语法有什么区别php7和php5语法有什么区别Jul 10, 2023 pm 03:25 PM

php7和php5语法区别有:1、PHP7引入了严格的类型声明,而PHP5变量的类型是隐式的;2、PHP7引入了对标量类型声明的支持,而PHP5并没有;3、PHP7引入了NULL合并运算符,而PHP5检查一个变量是否存在并且不为null,需要使用条件语句;4、PHP7添加了新的比较运算符“<=>”,而PHP5并没有;5、PHP7引入新特性匿名类,而PHP5并没有。

php7的版本和5有哪些不同php7的版本和5有哪些不同Sep 15, 2023 pm 04:11 PM

php7的版本和5的不同有性能提升、标量类型声明、返回值类型声明、异常处理改进、匿名类、语法改进、新的运算符、增强的错误处理和移除了一些旧特性等。详细介绍:1、性能提升,PHP7引入了全新的Zend引擎,名为Zend Engine 3.0,带来了显著的性能提升,PHP7的性能比PHP5提高了大约两倍,这主要是通过改进了内存管理、优化了函数调用和异常处理、增强了垃圾回收等等。

php中魔术常量有哪些php中魔术常量有哪些Sep 04, 2023 am 11:13 AM

常用的魔术常量有:1、​LINE,当前行号的数字表示;2、FILE,当前文件的完整路径和文件名;3、DIR,当前文件所在的目录;4、FUNCTION,当前函数的名称;5、CLASS,当前类的名称;6、TRAIT,当前特性的名称;7、METHOD,当前方法的名称;8、NAMESPACE,当前命名空间的名称等等。

PHP开发:使用 反射 和 魔术方法 实现代码自动生成和动态调用PHP开发:使用 反射 和 魔术方法 实现代码自动生成和动态调用Jun 15, 2023 pm 04:16 PM

PHP开发中,反射和魔术方法是两种常用的技巧。当我们需要自动生成代码或者动态调用某些函数时,反射和魔术方法可以使我们的代码更加灵活和高效。在本文中,我们将探讨如何使用反射和魔术方法来实现代码自动生成和动态调用。反射是PHP提供的一种强大的工具,它可以帮助我们在程序运行时获取类、方法和属性等信息。通过反射,我们可以动态地获取类或对象的方法、属性和注释等信息,使

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!