首页 > 后端开发 > php教程 > php的内置函数create_function创建出来的函数 参数列表与函数体引号问题

php的内置函数create_function创建出来的函数 参数列表与函数体引号问题

WBOY
发布: 2016-06-23 14:17:48
原创
934 人浏览过

create_function创建的函数

使用php的内置函数create_function创建出来的函数。
create_function('$item','return $item*3;')
问一下各位 为什么创建出来的函数 参数列表与函数体都要加上引号呢??

回复讨论(解决方案)

string create_function ( string $args , string $code )
两个参数都是字符串

那提交给函数的参数不是也可以是变量吗

因为 create_function 要求传入2个字符串参数

你的代码等价于

function tmp($item) { return $item*3; }$b = array_map('tmp', $a);
登录后复制

用闭包就可以
$b = array_map(function($item) { return $item*3; }, $a);
登录后复制

那提交给函数的参数不是也可以是变量吗

$item已经是提交给匿名函数的变量了。

$a=array(100,200,300);
$b=array_map(create_function('$item','return $item*3;'),$a);
你的意思是说('$item','return $item*3;')它们两个只是create_function这个函数的两个参数而已 它内部会自动创建这个函数是吗

$a=array(100,200,300);
$b=array_map(create_function('$item','return $item*3;'),$a);
var_dump($b);
create_function要求传入两个字符串 可是我这里$a的参数是100 200 300 是数值型的呀 求帮助

function tmp($item) { return $item*3; }
$b = array_map('tmp', $a);
写成这样,你是否有疑问呢?

create_function 要求传入两个字符串
并不代表 create_function 产生的函数也要求传入两个字符串
create_function 要求传入的两个字符串,分别是:匿名函数的参数列表和函数体

$a=array(100,200,300);
$b=array_map(create_function('$item','return $item*3;'),$a);
var_dump($b);
create_function要求传入两个字符串 可是我这里$a的参数是100 200 300 是数值型的呀 求帮助

你似乎混淆一个概念:
create_function是创建匿名函数,他本身(create_function)是一个函数,需要传入的参数是字符串。
而创建出来的函数的参数就是你要传递的参数,也就是函数的 形参 ,100,200,300是传给创建出来的函数的 实参,由于创建的匿名函数内部是直接使用该参数的,所以传进去是数值型,使用的就是数值型。如果传递的不是数值,例如是字符串0123,由于有*操作符,所以会先转化为数值然后操作:
请看:
$a=array(100,200,"011");
$b=array_map(create_function('$item','return $item*3;'),$a);
var_dump($b);

谢谢你 明白了。对了还有一个问题 我是初学者 有很多不明白地方 函数的形参都是以变量来定义的吗

是的都是以变量的形式来定义的

非常感谢上面的高手们

默默收藏

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板