欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-04-20 22:13:35
...
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);

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

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

非常感谢上面的高手们

默默收藏