php可变函数匿名函数,php学习笔记5--php中的可变变量,可变函数及匿名函数

可变变量指的是:将一个变量的值再次当做一个变量名从而得到另外一个变量的值。

如:

$name = 'dqrcsc';

$myname = 'name';//$myname的值碰巧是另一个变量的变量名

echo $name;//输出$name的值 'dqrcsc'

echo $myname;//输出$myname的值 'name'

echo $$myname;//得到$myname的值 'name',通过$再将其解析为一个变量 $name,从而输出$name的值 'dqrcsc'

匿名函数:即没有名字的函数

php中的函数的定义在编译阶段,会被系统存放到代码区,可以通过函数名在代码区中找到该函数的代码。

若没有名字,则需要通过变量来保存函数的内存地址。

$func = function(){

echo 'test';

};

var_dump($func);//object(Closure)#1 这是一个闭包

保存了函数的地址,之后要怎么调用该匿名函数呢?

回想函数的调用形式:myfunc();在函数名后面跟着一对括号,表示调用该函数。匿名函数调用形式与之相同

$func();//表示调用该变量所指向的匿名函数

既然加上()就被认为是调用函数,这里就自然而然的出现了可变函数的概念

可变函数:如同可变变量一样,一个变量保存了函数的名字,取得该函数的值即函数的名字,然后将其当做函数解析。

如:

function test(){

echo 'test';

}

$func = 'test';

$func();//$func取得该变量的值'test',后面加上(),被当做是函数test()去调用。

若是匿名函数呢?

$func = function(){

$name = 'dqrcsc';

echo $name;

};

$myfunc = 'func'; //$myfunc是一个可变变量,其存储的是$func的变量名

$$myfunc();//$$myfunc解析可变变量,获得$func的值,后面加上(),当做函数去调用,便输出'dqrcsc'了

由上可知,可变变量与可变函数的原理都是一样的,只是解析方式不同而已,一个变量想将它解析为可变变量,再加上个$符号即可,

想将它解析为可变函数,后面加上()即可。

那么问题来了,函数和变量可以同名吗?答案是可以的。

function test(){

echo 'function';

}

$test = 'var';//与函数同名的变量

$myvar = 'test';//定义一个变量刚好存放的值为变量名和函数名

echo $$myvar;//将其解析为可变变量,输出'var'

$myvar();//将其解析为可变函数,输出'function'

并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理

(1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...

[学习笔记] 在Eclipse中导入项目

参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.

CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

[学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar中的类解压后放在运行jar中

前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中 使用7z打开压缩包,查看所有依赖的jar都被解压以包名及class的方式存储在了运行jar中,此时jar的 ...

[学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中

本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...

[学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中

工程创建可参考前文: [学习笔记] 在Eclipse中使用Hibernate,并创建第一个工程,数据库为Oracle XE 在工程上鼠标右键: 找到java 选择 Runable JAR file N ...

php中的可变函数和匿名函数

可变函数 一个函数的名,是一个变量的时候,就称为可变函数 <?php header("content-type:text/html;charset=utf8"); funct ...

PHP&colon;第三章——PHP中表达式函数和匿名函数

PHP中的回调函数和匿名函数

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

随机推荐

LinuxMM--MemoryHierarchy

MemoryHierarchy  为了理解内核中的页替换算法,有必要认识linux中的存储体系分层架构.访问模式以及混合工作mixed workloads. 存储器分层架构  有两种类型的存储分层架构 ...

&lbrack;C&sol;C&plus;&plus;&rsqb;函数指针和函数分发表

// console.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include using nam ...

BZOJ 1054 题解

1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1888  Solved: 1035[Submit][Stat ...

细说HTTP上篇

HTTP概述 每天,都有数以亿万计的JPEG图片.HTML页面.文本文件.MPEG电影.WAV音频文件.Java小程序和其他资源在因特网上游弋.HTTP可以从遍布全世界的Web服务器上将这些信息快速. ...

Python3 实现数据读写分离设计

前言 首先读写分离可以保证数据库的稳定,简单的说就是当网站访问量大时,读写都在一个库,很有可能会出现脏数据的情况,如果采取阻塞似操作,那么用户体验就会变得更差. 而且目前大多数网站的读写是失衡的,以淘 ...

springboot 整合 redis

jedis 和 lettuce 都是用来连接 redis 的客户端,jedis 如果不使用连接池是非线程安全的,lettuce 使用 netty 线程安全且并发性能更好: springboot 2.x ...

MSSQL sql server 2005&sol;2008 row&lowbar;number&lpar;&rpar;函数应用之–删除表中重复记录&comma;只保留一条不重复数据

转自:http://www.maomao365.com/?p=4942 下文主要讲述:重复数据只获取一条的方法 row_number函数在数据库中的功能是为每一行 按照一定的规则生成一个编号,我们常常 ...

Unity知识结构总结

前言 本篇以知识结构图的形式对Unity引擎的常用基础知识内容进行了总结和梳理. 如果你学了一点关于Unity引擎的知识,又觉得太杂乱,那么希望本篇会给你一些帮助. 对应引擎版本:Unity  4.6 ...

Java NIO学习与记录(四): SocketChannel与BIO服务器

SocketChannel与BIO服务器 SocketChannel可以创建连接TCP服务的客户端,用于为服务发送数据,SocketChannel的写操作和连接操作在非阻塞模式下不会发生阻塞,这篇文章 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值