PHP 中的魔术常量

概述

PHP提供了9个魔术常数,您可以在PHP应用程序代码中使用。它们是“神奇的”,因为它们是在编译时定义的,不像常规常量(您可以自己定义)是在运行时定义的。这意味着它们的值可以根据它们在代码中的使用位置而更改。

FUNCTION

__FUNCTION__魔术常量返回使用它的函数的名称。如果在函数或方法之外使用它,它将返回空字符串。

在函数中使用__FUNCTION__

假设你有一个名为myFunction的函数:

function myFunction()
{echo __FUNCTION__;
}

调用上面的函数将输出:myFunction

在类方法中使用__FUNCTION__

假设你有一个类,它有一个名为myMethod的方法:

class MyClass
{public function myMethod(){echo __FUNCTION__;}
}

调用myMethod方法将输出:myMethod

在匿名函数中使用__FUNCTION__

假设你有一个匿名函数:

$myFunction = function () {echo __FUNCTION__;
};

调用$myFunction变量将输出:{closure}

__METHOD__

__METHOD__魔术常量返回使用它的方法的名称和编写它的类。如果在函数或方法之外使用它,它将返回空字符串。

在类方法中使用__METHOD__

假设您有一个App\Utilities\MyClass类,其方法名为myMethod

namespace App\Utilities;class MyClass
{public function myMethod(){echo __METHOD__;}
}

调用myMethod方法将输出:App\Utilities\MyClass::myMethod

在父类方法中使用__METHOD__

常量返回常量所在的类和方法名。这意味着如果你在父类中使用__METHOD__,任何子类都将使用父类的名称。

例如,假设你有一个名为App\Utilities\ParentClass的父类:

namespace App\Utilities;class ParentClass
{public function myMethod(){echo __METHOD__;}
}

你有一个名为App\Utilities\ChildClass的子类,它扩展了App\Utilities\ParentClass类:

namespace App\Utilities;class ChildClass extends ParentClass
{// ...
}

调用(new ChildClass())->myMethod()方法将输出:App\Utilities\ParentClass::myMethod

在函数中使用__METHOD__

如果你在一个函数中调用__METHOD__,输出将与__FUNCTION__相同。所以它只会输出函数的名称。

类似地,如果你在一个匿名函数中调用__METHOD__,输出将与__FUNCTION__相同。所以它只会输出{closure}

__CLASS__

__CLASS__魔术常量返回使用它的类的名称。如果在类外使用它,它将返回一个空字符串。

在类方法中使用__CLASS__

假设你有以下代码:

namespace App\Utilities;class MyClass
{public function myMethod(){echo __CLASS__;}
}

调用myMethod方法将输出:MyClass

在父类中使用__CLASS__

__METHOD__魔术常量类似,__CLASS__常量将返回写入它的类的名称。这意味着如果你在父类中使用__CLASS__,那么父类的名字将被使用,而不是子类的名字。

例如,假设你有一个名为App\Utilities\ParentClass的父类:

namespace App\Utilities;class ParentClass
{public function myMethod(){echo __CLASS__;}
}

你有一个名为App\Utilities\ChildClass的子类,它扩展了App\Utilities\ParentClass类:

namespace App\Utilities;class ChildClass extends ParentClass
{// ...
}

调用(new ChildClass())->myMethod()方法将输出:App\Utilities\ParentClass

在Trait中使用__CLASS__

如果在trait中使用了__CLASS__常量,它将返回使用trait的类的名称。

例如,假设你有一个名为MyTrait的trait:

namespace App\Utilities;trait MyTrait
{public function myMethod(){echo __CLASS__;}
}

你有一个名为MyClass的类,它使用了MyTraittrait:

namespace App\Utilities;class MyClass
{use MyTrait;
}

调用(new MyClass())->myMethod()方法将输出:App\Utilities\MyClass

::class

::class魔术常量返回类的完全限定类名。

这是我发现自己使用最多的魔法常数,特别是在Laravel应用程序中。当您使用字符串形式的类名时,它特别有用。

假设你有下面的类,App\Utilities\MyClass

namespace App\Utilities;class MyClass
{// ...
}

调用App\Utilities\MyClass::class将输出:App\Utilities\MyClass

在Laravel中使用::class

如果你是一个Laravel开发者,你会看到这个常量以前用于定义路由和模型关系。

例如,要在Laravel中定义一个web路由,你可以在你的routes/web.php文件中这样做:

use App\Http\Controllers\UserController;Route::get('/users', [UserController::class, 'index']);

注意我们是如何使用::class常量来引用UserController类的,这将给我们App\Http\Controllers\UserController。类似地,当在Laravel模型中定义关系时,你可以这样做:

namespace App\Models;use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;class User extends Model
{public function posts(): HasMany{return $this->hasMany(Post::class);}
}

在上面的例子中,我们使用::class常量来获取Post模型类的完全限定名,这将给我们App\Models\Post

TRAIT

__TRAIT__magic常量返回使用它的trait的完全限定名。如果在trait之外使用,它将返回一个空字符串。

例如,假设我们有以下特质:

namespace App\Utilities;trait MyTrait
{public function myMethod(){echo __TRAIT__;}
}

我们有一个使用MyTraittrait的类:

namespace App\Utilities;class MyClass
{use MyTrait;
}

调用(new MyClass())->myMethod()方法将输出:App\Utilities\MyTrait

NAMESPACE

__NAMESPACE__魔术常量返回当前使用它的命名空间。如果文件不在命名空间中,它将返回空字符串。例如,假设我们有以下代码:

namespace App\Utilities;echo __NAMESPACE__;

运行上面的代码会输出:App\Utilities

__METHOD____CLASS__魔术常量类似,__NAMESPACE__常量将返回写入它的文件的名称空间。

例如,假设你有一个名为App\Utilities\ParentClass的父类:

namespace App\Utilities;class ParentClass
{public function myMethod(){echo __NAMESPACE__;}
}

你有一个名为App\Utilities\Child\ChildClass的子类,它扩展了App\Utilities\ParentClass类:

namespace App\Utilities\Child;class ChildClass extends ParentClass
{// ...
}

运行(new ChildClass())->myMethod()方法将输出:App\Utilities

LINE

__LINE__魔术常量返回使用它的文件的当前行号。

例如,假设我们有以下代码:

<?php// An empty line...echo __LINE__;

运行上面的代码将输出5,因为echo __LINE__;语句位于文件的第5行。

FILE

__FILE__魔术常量返回使用它的文件的完整路径和文件名。

例如,假设我们在位于/Users/ashleyallen/my-app/index.php的文件中有以下代码

echo __FILE__;

运行上面的代码将输出/Users/ashleyallen/my-app/index.php

DIR

__DIR__魔术常量返回使用它的文件的目录。

例如,假设我们在位于/Users/ashleyallen/my-app/index.php的文件中有以下代码

echo __DIR__;

运行上面的代码将输出/Users/ashleyallen/my-app

值得注意的是,除非目录是根目录,否则__DIR__常量不包含尾随斜杠。

您也可以使用dirname(__FILE__)实现与__DIR__相同的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libvirt学习

文章目录 libvirt 简介节点、Hypervisor和域libvirt 安装和配置libvirt的XML配置文件libvirt APIMain libvirt APIsError handlingSpecial specific APIs 建立到Hypervisor的连接libvirt API使用编译libvirt工具virshvirt-clonevirt-dfvirt-imagevirt-installvirt-topvirt-what…

自动化测试工具Ranorex Studio(七十八)-故障排除

故障排除 如果你有连接问题&#xff0c;请考虑以下潜在的问题来源&#xff1a; • 请确保被测系统&#xff08;移动设备&#xff09;和运行测试的机器&#xff08;安装Ranorex的&#xff09;是在同一网络中的。 设备上的Wi-Fi设置更改后&#xff0c;请务必重新启动设备。 •…

常用的linux命令介绍

Linux是一个强大的操作系统&#xff0c;它提供了许多命令行工具来帮助用户管理文件和目录、监控系统性能、以及执行各种系统管理任务。下面是一些常用的Linux命令&#xff0c;我会用简单的语言来解释它们的作用&#xff1a; 1. ls • 作用&#xff1a;列出目录内容。 • 比喻&a…

万里数据库GreatSQL监控解析

GreatSQL是MySQL的一个分支&#xff0c;专注于提升MGR&#xff08;MySQL Group Replication&#xff09;的可靠性及性能。乐维监控平台可以有效地监控GreatSQL&#xff0c;帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理&#xff0c;收集数据库性…

缓存管理自动化:JuiceFS 企业版 Cache Group Operator 新特性发布

近期&#xff0c;JuiceFS 企业版推出了 Cache Group Operator&#xff0c;用于自动化创建和管理缓存组集群。Operator 是一种简化 Kubernetes 应用管理的工具&#xff0c;它能够自动化应用程序的生命周期管理任务&#xff0c;使部署、扩展和运维更加高效。 在推出 Operator 之前…

Wireshark和科来网络分析系统

Wireshark 是一款功能强大的网络协议分析工具&#xff0c;主要用于捕获和分析网络流量&#xff0c;帮助用户排查网络问题、进行安全分析和学习网络协议。以下是 Wireshark 的基础使用指南&#xff1a; 1. 安装 Wireshark 访问 Wireshark 官网 下载并安装适合你操作系统的版本…

无穿戴动作捕捉系统技术解密及多元化运用

在当今科技飞速发展的时代&#xff0c;动作捕捉技术不断革新&#xff0c;无穿戴动作捕捉系统崭露头角。与传统粘贴标记点的动作捕捉技术相比&#xff0c;无标记点动作捕捉技术具有显著优势。它能够在确保高精度捕捉的前提下&#xff0c;以非接触的方式极大地提升被捕捉对象的表…

GPT分区 使用parted标准分区划分,以及相邻分区扩容

parted 是一个功能强大的命令行工具&#xff0c;用于创建和管理磁盘分区表和分区。它支持多种分区表类型&#xff0c;如 MBR&#xff08;msdos&#xff09;、GPT&#xff08;GUID Partition Table&#xff09;等&#xff0c;并且可以处理大容量磁盘。parted 提供了一个交互式界…

DevOps工程技术价值流:Ansible自动化与Semaphore集成

在DevOps的浪潮中&#xff0c;自动化运维工具扮演着举足轻重的角色。Ansible&#xff0c;作为一款新兴的自动化运维工具&#xff0c;凭借其强大的功能和灵活性&#xff0c;在运维领域迅速崭露头角。本文将深入探讨Ansible的特点、架构、工作原理&#xff0c;以及其应用场景&…

2025元旦源码免费送

我们常常在当下感到时间慢&#xff0c;觉得未来遥远&#xff0c;但一旦回头看&#xff0c;时间已经悄然流逝。对于未来&#xff0c;尽管如此&#xff0c;也应该保持一种从容的态度&#xff0c;相信未来仍有许多可能性等待着我们。 免费获取源码。 更多内容敬请期待。如有需要可…

嵌入式开发中的机器人表情绘制

机器人的表情有两种&#xff0c;一种是贴图&#xff0c;一钟是调用图形API自绘。 贴图效果相对比较好&#xff0c;在存储空间大的情况下是可以采用的。 自绘比较麻烦&#xff0c;但在资源和空缺少的情况下&#xff0c;也是很有用的。而且自绘很容易通过调整参数加入随机效果&…

leetcode108:将有序数组转化为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确…

01-2023年上半年软件设计师考试java真题解析

1.真题内容 在某系统中&#xff0c;类 Interval(间隔) 代表由下界(lower bound(边界))上界(upper bound )定义的区间。 要求采用不同的格式显示区间范围。 如&#xff3b;lower bound , upper bound ]、[ lower bound … upper bound ]、[ lower bou nd - upper bound &#x…

svn分支相关操作(小乌龟操作版)

在开发工作中进行分支开发&#xff0c;涉及新建分支&#xff0c;分支切换&#xff0c;合并分支等 新建远程分支 右键选择branch/tagert按钮 命名分支的路径名称 点击确定后远程分支就会生成一个当时命名的文件夹&#xff08;开发分支&#xff09; 分支切换 一般在开发阶段&a…

【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等

1、模拟器如何开启网络&#xff1f; 模拟器使用的是电脑本身的网络&#xff0c;不通过代理即可访问网络。 2、创建子window后&#xff0c;锁屏很短时间内&#xff0c;应用会被杀死&#xff1f; 没开长时任务&#xff0c;锁屏和退后台保活要开长时任务。 应用退至后台后&…

Python中PDF转Word的技术

Python PDF转Word技术概述 在日常办公和数据处理中&#xff0c;经常需要将PDF文档转换为Word文档&#xff0c;以便进行编辑、修改或格式调整。Python作为一种强大的编程语言&#xff0c;提供了多种库和工具来实现这一功能。以下是对Python中PDF转Word技术的详细介绍。 一、技…

功率器件热设计基础(四)——功率半导体芯片温度和测试方法

/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础&#xff0c;只有掌握功率半导体的热设计基础知识&#xff0c;才能完成精确热设计&#xff0c;提高功率器件的利用率&#xff0c;降低系统成本&#xff0c;并保证系统的可靠性。 功率器件热设计基础系列文章会…

Kafka消息不丢失与重复消费问题解决方案总结

1. 生产者层面 异步发送与回调处理 异步发送方式&#xff1a;生产者一般使用异步方式发送消息&#xff0c;异步发送有消息和回调接口两个参数。在回调接口的重写方法中&#xff0c;可通过异常参数判断消息发送状态。若消息发送成功&#xff0c;异常参数为null&#xff1b;若发…

linux-centos-安装miniconda3

参考&#xff1a; 最新保姆级Linux下安装与使用conda&#xff1a;从下载配置到使用全流程_linux conda-CSDN博客 https://blog.csdn.net/qq_51566832/article/details/144113661 Linux上删除Anaconda或Miniconda的步骤_linux 删除anaconda-CSDN博客 https://blog.csdn.net/m0_…

【每日学点鸿蒙知识】Taro、native层获取文件宽度、位置变化callback、数据迁移、oh_modules说明等

1、Taro开发HarmonyOS NEXT有相应的开发文档吗&#xff1f; Taro Harmony Hybrid容器是为让Taro小程序代码可以完整的运行在鸿蒙单内核系统里&#xff0c;在Taro H5平台的基础上&#xff0c;基于原生壳工程的jsbridge能力&#xff0c;扩展H5平台不支持的小程序Api能力&#xf…