PHP 范围解析操作符,__call(),__callstatic()的使用

Python魔术方法与变量详解:从原理到实践 魔术方法(Magic Methods)是面向对象编程中的特殊方法,以双下划线开头和结尾,由编程语言在特定场景自动调用。这类方法实现了运算符重载、属性访问控制等核心功能,是Python实现多态和封装的重要机制。在工程实践中,魔术方法广泛应用于对象初始化(__init__)、上下文管理(__enter__/__exit__)等场景,能显著提升代码的可读性和灵活性。通过__slots__等魔术变量可以优化内存占用,而__getattr__等方法则能实现动态属性访问。掌握这些特性对于开发框架、ORM系统等复杂项目尤 阅读详情
<?php
echo "<h5>范围解析操作符 :: 的使用<br/>";
echo "在类的内部使用</h5>";
echo "<hr/>";

class Foo{
    public function __construct()
    {
        define('__AAA__','a');
    }
    public function __call($name, $params)
    {
        $this->invoke($name, $params, '__call');
    }

    public function invoke($name, $params, $func)
    {
        //框架里面在这里可以使用 call_user_function_array() 来调用类中的方法
        var_dump($func);
        var_dump($name);
        var_dump($params);
        exit;
    }

}

class MyClass extends Foo
{
    function __construct()
    {
        parent::__construct();
    }
    const CONST_VALUE = 'A constant value';

    public function testinner()
    {
        //次数的self::inner 相当于在内部寻找一个inner的方法,虽然inner方法非静态方法,但是依然会打印出 调用成功   关键词   ::  范围解析操作符 (::)  self,parent,static 的使用
        self::inner();
        //此处的 self:: 相当于在类内部寻找一个test__CALL_PARENT的方法。本类中没有找到,然后回找父类,父类中没有这个方法。则调用__call方法。而不是直接调用静态方法 __callStatic
        self::test__CALL_PARENT('aaaaaaa');
    }
    public static function __callStatic($name, $arguments)
    {
        //此处的static,self,parent 关键词结果都一样,都是调用父类中的invoke 方法
        parent::invoke($name, $arguments, '__callStatic');
    }

    public function inner()
    {
        echo "调用成功!";
    }
    public static function staticfunction(){
        echo "我是一个静态函数";
    }
}

$classname = new MyClass();
//测试self :: 在类内部的使用
$classname->testinner();
//类外部调用静态方法
$classname::staticfunction();
//类外部调用不存在的静态方法
$classname::testStatic('sssssss','222');
//__call 方法的使用;
$classname->aa('aa', 'bb', 'vv', ['aa', 'bb', 'cc']);
 

parent::__construct()的使用 如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。 如果子类中也有构造函数,同时希望继承父类的构造函数,那需要使用 parent::construct(); 如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct()的方法却被用于其它用途时。 与其它方法不同,当 __construct() 被与父类 __construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT错误信息。

:: 范围解析操作符的使用 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。 当在类定义之外引用到这些项目时,要使用类名。 自 PHP 5.3.0 起,可以通过变量来引用类,该变量的值不能是关键字(如 self,parent 和 static)。

在类内部使用 self:: 相当于直接访问该方法,而并不把他当做静态变量来处理

gesp c++ 五级知识点 阅读详情

相关推荐

从Simulink仿真到DSP28335真机部署:PID闭环控制快速移植指南

本文详细介绍了如何将Simulink中的PID闭环控制算法快速移植到DSP28335嵌入式平台。通过模型与代码映射、浮点与定点数选择、定时器中断配置、物理输出实现以及调试技巧五个关键步骤,帮助工程师高效完成从仿真到真机部署的全过程,特别适合需要实现精确控制的嵌入式开发者。

weixin_42521843的博客 363

__call()和__callStatic()方法

__call()    当对象访问不存在的方法时,__call()方法会被自动调用 __callStatic()    当对象访问不存在的静态方法时,__callStatic()方法会被自动调用 这两个方法在PHP里面也叫方法的重载(overloading)    注意区分重写(overwrite)    通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现 1 <?php 2 class MagicTest{ 3 //方法重载 4 //这个方法的参数第一..

firstcode666的博客 614

别再死记硬背了!一张图搞懂无刷电机半桥与全桥驱动的核心差异(附避坑指南)

本文深入解析无刷直流电机的半桥与全桥驱动方式的核心差异,提供直观对比与选型指南。半桥驱动结构简单、成本低,适合低要求场景;全桥驱动性能优越但复杂,适用于高精度控制。文章还包含实战避坑指南,帮助工程师优化驱动方案选择与应用。

weixin_29290947的博客 319

php中__call与__callstatic()使用

php 5.3 后新增了__call与__callStatic魔法方法。 __call当要调用的方法不存在或权限不足时,会自动调用__call 方法。 __callStatic当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。 __call($funcname, $arguments) __callStatic($funcname, $argume...

lmp5023的博客 1815

Android 跨进程通信-(一)Binder概念引入

前言 主要对Android中的跨进程通信进行总结下,这篇先梳理下里面的涉及的一些概念 一 多进程 1.进程与线程 进程:系统中正在运行的一个应用程序,某个程序一旦运行就是一个进程,是资源分配的最小单位; 线程:程序执行的最小单位,包含在进程中,一个进程可以包含多个线程。 2.Android应用中的多进程 (1)dalivk虚拟机 Android系统的底层任务管理以及驱动都是基于Linux系统。一个Android系统其实就是一个Linux系统,通过adb shell进入连接的手机,就可以看到Li

nihaomabmt的专栏 1103

ANSYS ACT插件开发实战指南:从IronPython脚本到XML界面设计

本文提供了一份详尽的ANSYS ACT插件开发实战指南,重点讲解如何利用IronPython脚本实现仿真自动化,并通过XML设计用户友好的向导界面。内容涵盖从环境搭建、脚本编写(如自动创建材料)、界面控件绑定到调试打包的全流程,旨在帮助仿真工程师和团队负责人将重复性工作流程标准化,显著提升ANSYS软件的使用效率。

weixin_29310605的博客 451

php中 __call与__callStatic的作用与使用场景

关于这两个参数的具体作用是: __call: 在对象中调用一个不可访问方法时,__call() 会被调用。 __callStatic:在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。 我们先上demo,在去了解这两个方法有哪些具体使用场景 class demo1{ public function exist_in(){ echo '我在'; }...

weixin_44320900的博客 1104

服务器被黑?快速检测和识别系统中的恶意进程

在管理服务器时,检测和识别系统中的恶意进程至关重要。本文介绍了使用 `ps`、`top`、`htop` 等系统监控工具,分析日志文件,以及使用 `chkrootkit` 和 `rkhunter` 等安全工具的方法。通过这些步骤,可以有效地检测和处理恶意进程,确保系统的安全和稳定。

_midnight的博客 1416

魔术方法 :__callStatic( )实例详解

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34209851的博客 251

PID控制器(位置式和增量式)

PID控制算法

zhinian_hao的博客 4512

【图像去噪】论文精读:Restormer: Efficient Transformer for High-Resolution Image Restoration

论文题目:Restormer: Efficient Transformer for High-Resolution Image Restoration —— Restormer:用于高分辨率图像恢复的高效变压器高效Transformer模型用于图像恢复!由于卷积神经网络 (CNN) 在从大规模数据中学习可泛化的图像先验方面表现良好,因此这些模型已广泛应用于图像恢复和相关任务。最近,另一类神经架构 Transformer 在自然语言和高级视觉任务中显示出显着的性能提升。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1523

什么是 `__call` 和 `__callStatic` 方法?它们的作用是什么?使用场景是什么?底层原理是什么?

_call。

长风破浪会有时的博客 1038

硅基半导体量子点:单电子自旋量子比特技术手册

现在我们已经了解了从硅片到容错计算的全部环节,让我们用一张总览图把碎片拼成完整拼图。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;important;important;important;color:#000!important;important;important;important;important;color:#000!

VectorShift的博客 367

php5新特性,PHP5.3新特性介绍

Namespacesphp 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP Namespaces FAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得到了解决。代码更清晰5.3之前常见的代码,需要自定义前缀区分函数和类名PLAIN TEXTCODE:function MY_wrapper() {}class MY_DB { }define('MY...

weixin_28853079的博客 212

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

php5.3的新特性总结

Namespacesphp 5.3最大的改动,毫无疑问就是Namespaces(此前有一篇相关的PHP Namespaces FAQ)。这给php开发人员带来的好处不少,广为人们所诟病的函数命名问题也得到了解决。 代码更清晰5.3之前常见的代码,需要自定义前缀区分函数和类名 PLAIN TEXT CODE: function MY_wrapper() {}class MY_DB { }de...

weixin_30908707的博客 231

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

PHP后端面试核心考点与实战解析

在Web开发领域,PHP作为经典的服务器端脚本语言,其变量作用域、垃圾回收机制等语言特性直接影响代码性能与安全性。理解OPcache原理、预处理语句防注入等优化技术,能有效提升应用吞吐量。数据库层面,B+树索引优化与Redis持久化策略是解决高并发场景的关键技术,而微服务架构下的服务发现机制则体现了分布式系统设计能力。本文结合PHP8的JIT编译器等新特性,深入解析面试中常见的LRU缓存实现、短链接系统设计等实战题型,帮助开发者掌握从语言基础到架构设计的全栈技能。

weixin_34320724的博客 518

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

PHP各版本之间差异

PHP5.3 __toString 魔术方法不再接受参数. 魔术方法 __get, __set, __isset, __unset, and __call 应该总是公共的(public)且不能是静态的(static). 方法签名是必须的. 添加了命名空间的支持 增加了goto支持。 新增了两个魔术方法, __callStatic 和 __invoke. 随着匿名函数的加入,PHP ...

weixin_34297300的博客 236

PHP静态调用 = 动态调用?

维度真静态 (LSB (Facade (动态 ($obj->绑定时间编译时运行时运行时运行时多态支持无类级别实例级别实例级别底层机制直接跳转检查魔术方法 + 容器解析HashTable 查找性能⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ (有缓存)⭐⭐⭐⭐灵活性低中高高隐喻固定分机智能路由秘书转接查通讯录终极心法静态调用的本质,是“语法的糖衣”。别被迷惑,要看它背后是硬连接还是软代理。self是坚守初心,static是顺势而为,Facade是借尸还魂。

长风破浪会有时的博客 434

PHP5.3新特性之语言特性

 PHP5.3新特新之语言特性 新的语言特性1) __DIR__* 引入 __DIR__ magic常量 定位脚本的目录echo dirname(__FILE__); //    /* vs */   echo __DIR__; // >= 5.32) ?:  操作符* 允许从2个值的or/and表达式快速的获取一个非空的值

静心斋 522

UnserializeOne

_set() 用于将数据写入不可访问的属性 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值 // 不存在赋值。__set_state(),调用var_export()导出类时,此静态方法会被调用。__isset(),当对不可访问属性调用isset()或empty()时调用。__isset() 在不可访问的属性上调用isset()或empty()触发。__unset(),当对不可访问属性调用unset()时被调用。__invoke(),调用函数的方式调用一个对象时的回应方法。

qq_64201116的博客 1470

typephp的编译核心phpx原理解析

PHPX 不是一个简单的 “C++ 包装 Zend API” 的薄封装,而是一个深度优化的 AOT 运行时库RAII 类型安全封装消除了手动 zval 引用计数管理php::fn 直连层消除了的动态派发开销,是 AOT 性能的关键嵌入式运行时让编译产物可以脱离 PHP CLI 独立运行让 C++ 原生对象和容器可以无缝融入 PHP 对象体系高精度数值 + std 容器提供了 PHP 原生不具备的性能类型完整的扩展注册层让编译产物可以作为标准 PHP 扩展加载。

Z.X的博客 196

[qsctf] 雏形系统

解题过程 拿到混淆代码 得到php 混淆代码,如下 将eval 修改为echo 运行,得到第一次解密的代码 再次修改eval为echo ,得到明文代码 构造payload 进行反序列化,得到exp 传参最终拿到flag 讲解解题原理之前,简单说一下这道题里面的几个问题。PHP 的类虽然是 “独立定义” 的,但类的实例(对象)的属性可以指向另一个类的实例—— 这是把独立类串起来的核心! 二、拆解 next::PLZ(next::PLZ(next::PLZ(this->pass) 是什么? 是 PHP 的

SwBack的博客 1265

渗透测试 ( 0 ) --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

渗透测试 --- http协议、XSS、CSRF、文件上传、文件包含、反序列化漏洞

freeking101的博客 5538

_call() 和 __callStatic() 魔术方法在什么情况下会被调用?

想象你有一个魔法盒子(对象),这个盒子有很多神奇的功能(方法)。有一天,你想用这个盒子做一个新的魔法(调用一个新方法),但是这个魔法盒子并没有这个功能。这时,魔法盒子里的一个特殊机制(还是想象你有一个魔法盒子,但是这个盒子有一些不需要打开盒子就能使用的魔法(静态方法)。有一天,你想用一个这样的魔法,但是这个魔法并不存在。方法)就会被触发,告诉你:“哎呀,你想用的这个不需要打开盒子的魔法我可不会哦!方法)就会被触发,告诉你:“哎呀,你想做的这个魔法我可不会哦!方法),但是魔法盒子并没有这个功能,所以。

长风破浪会有时的博客 399

php 静态上下文,__callStatic():从静态上下文实例化对象吗? - php

我对PHP中的“静态”和“动态”函数与对象如何协同工作感到困惑,尤其是在__callStatic()方面。__callStatic()的工作方式:您可以有一个普通的类MyClass,在该类中您可以放置一个名为__callStatic()的静态函数,该函数仅被调用当MyClass没有您想要的名称的静态函数时。即我致电MyClass::newFunction();newFunction()被静态调用,...

weixin_36477469的博客 264

php callstatic this,PHP魔术方法之__call和__callStatic详解(代码实例)

本文目标:1、了解PHP中魔术方法的定义2、了解__call()魔术方法的使用场景3、掌握__call()魔术方法的用法4、了解__callStatic()魔术方法的使用场景5、掌握__callStatic()魔术方法的用法(一)、了解PHP中魔术方法的定义PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。这2个魔术方法...

weixin_29775479的博客 596
上一篇: 测试new 和call_user_function()和call_user_function_array()执行效率问题
下一篇: PHP中new static() 和 new self()
o王o
博客等级 码龄13年 32粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值