核心要点
- PHP 提供预定义常量和魔术方法来增强代码功能。预定义常量提供关于代码和 PHP 的只读信息,而魔术方法是类中保留的名称,用于启用特殊的 PHP 功能。
- 预定义常量(用双下划线括起来的全部大写字母)提供关于代码的信息。示例包括
__LINE__
(返回源文件中的行号)、__FILE__
(表示文件的名称,包括其完整路径)、__DIR__
(仅表示文件的路径)、__CLASS__
(返回当前类的名称)、__FUNCTION__
(返回当前函数的名称)、__METHOD__
(表示当前方法的名称)和__NAMESPACE__
(返回当前命名空间的名称)。 - 魔术方法提供了与特殊 PHP 行为挂钩的机制。它们包括
__construct()
(用于创建类的对象实例)、__destruct()
(当对象被 PHP 的垃圾收集器销毁时调用)、__get()
(如果属性未定义或不可访问,并且在 getter 上下文中调用时调用)、__set()
(在 setter 上下文中为未定义的属性调用)、__isset()
(检查属性是否已设置)、__unset()
(接收一个参数,即程序想要取消设置的属性的名称)和__toString()
(帮助将对象表示为字符串)。
PHP 为程序提供了一组特殊的预定义常量和魔术方法。与使用 define()
设置的常量不同,这些常量的值取决于它们在代码中的使用位置,并用于访问关于代码和 PHP 的只读信息。魔术方法是您可以在类中使用的保留方法名称,用于与特殊的 PHP 功能挂钩。如果您尚未了解 PHP 的魔术方法和常量,那么本文适合您!我将回顾一些更有用的方法以及如何在代码中使用它们。
预定义常量
预定义常量用于访问有关代码的信息。这里的常量用双下划线括起来的全部大写字母编写,例如 __LINE__
和 __FILE__
。以下是 PHP 提供的一些有用的常量:
-
__LINE__
返回源文件中常量出现的行号,如下所示:
<?php echo "line number: " . __LINE__; // line number: 2 echo "line number: " . __LINE__; // line number: 3 echo "line number: " . __LINE__; // line number: 4 ?>
-
__FILE__
表示文件的名称,包括其完整路径,如下所示:
<?php echo "the name of this file is: " . __FILE__; // the directory and name of file is: C:wampwwwindex.php ?>
-
__DIR__
仅表示文件的路径:
<?php echo "the directory of this file is: " . __DIR__; // the directory of this file is: C:wampwww ?>
-
__CLASS__
返回当前类的名称:
<?php class Sample { public function __construct() { echo __CLASS__; } } $obj = new Sample(); // Sample ?>
-
__FUNCTION__
返回当前函数的名称:
<?php function mySampleFunc() { echo "the name the function is: " . __FUNCTION__; } mySampleFunc(); //the name of function is: mySampleFunc ?>
-
__METHOD__
表示当前方法的名称:
<?php class Sample { public static function myMethod() { echo "the name of method is: " . __METHOD__; } } Sample::myMethod(); // the name of the method is: myMethod ?>
-
__NAMESPACE__
返回当前命名空间的名称:
<?php namespace MySampleNS; echo "the namespace is: " . __NAMESPACE__; // the name space is: MySampleNS ?>
魔术方法
魔术方法提供与特殊 PHP 行为挂钩的机制。与之前的常量不同,它们的名称使用两个前导下划线以小写/驼峰式字母编写,例如 __construct()
和 __destruct()
。__construct()
是 PHP 调用以创建类对象实例的魔术方法。它可以接受任意数量的参数。
<?php class MySample { public function __construct($foo) { echo __CLASS__ . " constructor called with $foo."; } } $obj = new MySample(42); // MySample constructor called with 42 ?>
顾名思义,__destruct()
方法在对象被 PHP 的垃圾收集器销毁时调用。它不接受任何参数,通常用于执行可能需要的任何清理操作,例如关闭数据库连接。
<?php class MySample { public function __destruct() { echo __CLASS__ . " destructor called."; } } $obj = new MySample; // MySample destructor called ?>
我们的下一个魔术方法处理属性重载,并提供了一种让 PHP 处理未定义(或我们无法访问)的属性和方法调用的方法。如果属性未定义(或不可访问)并且在 getter 上下文中调用,则 PHP 会调用 __get()
方法。该方法接受一个参数,即属性的名称。它应该返回一个值,该值被视为属性的值。__set()
方法在 setter 上下文中为未定义的属性调用。它接受两个参数,属性名称和值。
<?php echo "line number: " . __LINE__; // line number: 2 echo "line number: " . __LINE__; // line number: 3 echo "line number: " . __LINE__; // line number: 4 ?>
在上面的示例代码中,属性名称未在类中定义。我尝试将值“mysample”赋值给它,PHP 调用魔术方法 __set()
。它接收“name”作为 $prop
参数和“Alireza”作为 $value
,我将值存储在私有 $myArray
数组中。__get()
方法的工作方式类似;当我输出 $obj->name
时,会调用 __get()
方法,并将“name”作为 $prop
参数传入。还有其他魔术方法可以帮助我们检索和检查不可访问的成员变量,这些成员变量也出现在示例代码中:__isset()
、__unset()
和 __toString()
。__isset()
和 __unset()
都由 PHP 中名称相同(不带下划线)的函数触发。__isset()
检查属性是否已设置,并接受一个参数,即我们要测试的属性。__unset()
接收一个参数,即程序想要取消设置的属性的名称。在许多情况下,将对象表示为字符串非常有用,例如输出给用户或其他进程。通常情况下,PHP 将它们表示为内存中的 ID,这对我们来说并不好。__toString()
方法帮助我们将对象表示为字符串。该方法在任何将对象用作字符串的情况下都会被触发,例如:echo "Hello $obj"
。它也可以像任何其他普通公共方法一样直接调用,这比诸如附加空字符串以强制转换之类的技巧更可取。
总结
面向对象编程可以产生更易于维护和测试的代码。它帮助我们创建更好、更标准的 PHP 代码。此外,它还可以利用 PHP 提供的魔术方法和常量。
图片来自 Stepan Kapl / Shutterstock
PHP 魔术方法和预定义常量的常见问题解答
PHP 中有哪些不同类型的魔术方法?
PHP 中的魔术方法是当满足某些条件时会自动触发的特殊函数。它们总是以双下划线 () 开头。PHP 中不同类型的魔术方法包括 `construct()、
destruct()、
call()、
callStatic()、
get()、
set()、
isset()、
unset()、
sleep()、
wakeup()、
toString()、
invoke()、
set_state()、
clone()和
debugInfo()`。这些方法中的每一个都由特定事件触发,例如创建对象时、访问属性时或调用方法时。
如何在 PHP 中使用预定义常量?
PHP 中的预定义常量是始终可用的内置常量。它们包括核心常量,如 PHP_VERSION
和 PHP_OS
,以及各种扩展定义的许多其他常量。要使用预定义常量,只需编写其名称,而无需在其前面添加美元符号 ($) 。例如,要获取当前的 PHP 版本,可以使用 PHP_VERSION
常量,如下所示:echo PHP_VERSION;
PHP 中 __construct()
魔术方法的用途是什么?
PHP 中的 __construct()
魔术方法在每次从类创建新对象时都会自动调用。它通常用于初始化对象的属性或执行对象在使用前所需的任何设置。
我可以在 PHP 中定义自己的常量吗?
是的,您可以使用 define()
函数或 const
关键字在 PHP 中定义自己的常量。定义常量后,就不能更改或取消定义它。
PHP 中魔术方法和常规方法有什么区别?
PHP 中魔术方法和常规方法的主要区别在于,魔术方法会由某些事件自动触发,而常规方法需要显式调用。此外,魔术方法总是以双下划线 (__) 开头,而常规方法则不是。
如何检查 PHP 中是否定义了常量?
您可以使用 defined()
函数检查 PHP 中是否定义了常量。此函数将常量的名称作为字符串,如果常量已定义,则返回 true,否则返回 false。
PHP 中 __destruct()
魔术方法的用途是什么?
PHP 中的 __destruct()
魔术方法在对象被销毁或脚本结束时自动调用。它通常用于执行清理任务,例如关闭数据库连接或释放资源。
我可以在 PHP 中将魔术方法与静态方法一起使用吗?
是的,您可以在 PHP 中将魔术方法与静态方法一起使用。__callStatic()
魔术方法在调用不可访问或类中不存在的静态方法时会自动触发。
PHP 中预定义常量的一些常见用途是什么?
PHP 中的预定义常量通常用于获取有关 PHP 环境的信息或控制某些函数的行为。例如,PHP_VERSION
常量可用于检查 PHP 版本,PHP_OS
常量可用于检查操作系统。
我可以在 PHP 中重写魔术方法吗?
是的,您可以在 PHP 中重写魔术方法。创建子类时,您可以提供自己的魔术方法实现。但是,如果您想调用父类的实现,可以使用 parent
关键字。
以上是PHP中的魔术方法和预定义常数的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

在本文中,我们将在Laravel Web框架中探索通知系统。 Laravel中的通知系统使您可以通过不同渠道向用户发送通知。今天,我们将讨论您如何发送通知OV

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境