① php 问题 unexpected T_FUNCTION
整理了一下格式,代码没有问题,三次输出中第一个和第三个都能正常显示,第二个会提示全局变量里没有index v1,因为你的$v1是定义在function里面的,所以提示没有也是正确的。
如果还报错就检查一下各种括号的匹配对不对,还不行就报一下PHP版本
functionfunc1(){
$v1=10;
$v2=20;
$func2=function()use($v1,&$v2){
$v1++;
$v2--;
var_mp($v1,$v2);
//11,19
var_mp($GLOBALS['v1']);
};
$func2();
var_mp($v1,$v2);
//10,19
}
② php匿名函数中的use有什么用
php文档中关于use的说明
所有支持命名空间的PHP版本支持三种别名或导入方式:为类名称使用别名、为接口使用别名或为命名空间名称使用别名。PHP5.6开始允许导入函数或常量或者为它们设置别名。
在PHP中,别名是通过操作符use来实现的.下面是一个使用所有可能的五种导入方式的例子:
Example#1使用use操作符导入/使用别名
<?php
namespacefoo;
useMyFullClassnameasAnother;
//下面的例子与useMyFullNSnameasNSname相同
useMyFullNSname;
//导入一个全局类
useArrayObject;
//importingafunction(PHP5.6+)
usefunctionMyFullfunctionName;
//aliasingafunction(PHP5.6+)
;
//importingaconstant(PHP5.6+)
useconstMyFullCONSTANT;
$obj=newnamespaceAnother;//实例化fooAnother对象
$obj=newAnother;//实例化MyFullClassname对象
NSnamesubnsfunc();//调用函数MyFullNSnamesubnsfunc
$a=newArrayObject(array(1));//实例化ArrayObject对象
//如果不使用"useArrayObject",则实例化一个fooArrayObject对象
func();//
echoCONSTANT;//
?>
③ PHP的几种函数参数类型及一些特殊函数
给你整理如下:
默认参数:在函数声明时给参数赋值,而且此默认参数只能在最后,调用时可不传递任何参数(若只有默认参数的情况下)
可变参数:一个函数可能需要可个可变数目的参数。在php中,提供了三个函数用于检索函数中所传递的参数。func_get_args()返回一个提供提供给函数的所有参数的数组;func_num_args()返回提供给函数的参数数目;func_get_arg()返回一个来自参数的特定参数。具体如下:
$array = func_get_args();
$count = func_num_args();
$value = func_get_arg();
遗漏参数:当调用函数时,可以传递任意个参数给函数。当函数必要的参数没有i被传递时,此参数值是空,并且PHP会为每个遗漏的参数发出警告
可变函数:使用可变变量,可以基于变量的值调用函数
匿名函数:又叫闭包函数,允许临时建立一个没有指定名称的函数,最经常用作回调函数参数的值。需要注意的是,在匿名函数内的变量的用法不同于全局变量,在匿名函数内的变量是一个闭包变量,另外,被调用闭包的作用域不必是相同的。
④ PHP匿名函数怎么使用
这里的use实际上就是将全局的$message拷贝到局部函数中,所以很类似于global,不过和global不同的是:
use时:当你在函数中对$message更改的时候不会影响到全局的那个$message,也就是说使用use实际上是拷贝一份变量到函数中。
global时:正相反,在函数中对$message更改的时候会影响到全局的那个$message。我在后盾人视频平台才看见教师讲这个,没想到就能帮到你,呵呵太有趣了
⑤ php的匿名函数怎么访问外部变量
使用create_function()创建"匿名"函数
前面提到PHP5.3中才才开始正式支持匿名函数,说到这里可能会有细心读者有意见了,因为有个函数是可以生成匿名函数的: create_function函数,在手册里可以查到这个函数在PHP4.1和PHP5中就有了,这个函数通常也能作为匿名回调函数使用,例如如下:
<?php
$array = array(1, 2, 3, 4);
array_walk($array, create_function('$value', 'echo $value'));
这段代码只是将数组中的值依次输出,当然也能做更多的事情。 那为什么这不算真正腔御备的匿名函数呢,我们先看看这个函数的返回值,这个函数返回一个字符串,通常我们可以像下面这样调用一个函数:
<?php
function a() {
echo 'function a';
}
$a = 'a';
$a();
我们在实现回调函数的时候也可以采用这样的方式,例如:
<?php
function do_something($callback) {
// doing
# ...
// done
$callback();
}
这样就能实现在函数do_something()执行完成之后调用$callback指定的函数。回到create_function函数的返回值:函数返回一个唯一的字符串拆败函数名,出现错误的话则返回FALSE。这么说这个伍毁函数也只是动态的创建了一个函数,而这个函数是有函数名的,也就是说,其实这并不是匿名的。只是创建了一个全局唯一的函数而已。
⑥ PHP到底有多糟糕
php是web开发第一语言,这已经是坐稳了的事实,因为使用简单,工具完善,开发效率高等优点为它积聚了大量的粉丝,号称世界上最好的语言。 然而,就算是世界上最好的语言也有缺陷,下面我挑几个php语法层面不那么好用的特性吐槽下。
变量面前的美元($)符号
我想不明白当初php语言的设计师是怎么想的,为什么非要在变量名面前加上这个美元符号?每次我书写变量时必须要按一下shift +4键,用其它语言可以很流畅的写代码,在php中却老是被按这个shift打断整个过程,这除了能给程序员带来麻烦,我实在看不到有其它一丁点的好处。网上流传着的说法好像是因为带美元符号代码解析起来更容易, 性能更好。但是解释类型的语言又不只有php ,为什么其它语言就不用让程序员打这个讨厌的美元符号。每天看着满屏的美元符号,我口袋里的钱也没见多一分呀。
访问对象成员要使用箭头符号
明明按一下点号(.)就可以方便快捷的搞定的问题,却非要使用简单符号(->)来代替,真的是借我一百个脑袋也想不明白php设计者在设计这个特性是什么逻辑。难不成是因为php解释器最终会把php的代码转换成c代码执行,而c中访问指针的成员就是使用箭头符号的。如果是这样那显然是php的设计者们偷懒了,难到不能在转换成c执行的过程中多一步将点号转换为箭头符号的过程吗?不要告诉我又是因为性能问题而办不到,他们就不能为程序员想想?
数组即能当列表也能当字典
写一个函数,返回一个数组类型,但是在函数的外面,鬼知道这个数组是一个list还是一个map?写php代码不知道被这个特性坑过多少回,如果是别人写的函数, 又没有注释,那非得跑进函数里看个明白才知道应该这么样使用这个函数才是安全的。难到就不能把array拆成两个独立的类型分别代表list(列表)和map(字典)吗?这能为程序提供很大的便利,写的代码也更加不会出错。
匿名函数使用外部变量必须使用use关键字导入
这个特性不能说完全没有优点,对于代码的可维护性还是能起到正面的作用的,因为这么做能让我知道我在匿名函数体里面对于外部会有哪些依赖,让代码更可控。然而,这种写法真的是非常的不方便,每次写lambda时,要用到外部的变量时,都要使用use导入,把代码搞的看起来很臃肿,而且,因为其它语言没这个限制,习惯已经养成,所以每次都会忘记使用use导入,导致代码出错,增加排查问题的时间,这真的不是什么好玩的事。
用include导入文件
当把代码模块化时,然后在其它文件中使用,每次都需要使用这个include把文件导入进来,而且还要考虑路径的问题,在结构复杂的项目中,非常让人蛋疼。而像Java和Python之类的语言中,代码管理机制设计的非常好,想用什么import进来就可以了,根本不用考虑路径啊,文件名大小写啊之类的问题,能大大的提升开发效率。虽然,有框架可以解决这类问题,但毕竟是外部实现,使用起来总归不是那么顺畅。这也算是php一个比较大的毛病了。
总结的这五点算是php中存在问题的典范了,希望php团队能加把劲,把这些问题在未来的版本中优化掉,让开发者写代码时有更好的体验,更高的效率,让世界上最好的语言名副其实
⑦ PHP关于Use用法的疑问
子类B不可以直接使用类C的方法。需要Use类C后,才可以使用类C的方法。
use是你在当前文件需要引用哪个类时,在当前文件的代码前面声明——如果当前文件有声明namespace,则放在namespace之后。
⑧ PHP没有函数名的函数什么时候需要用到呢
没有函数名的函数也就是匿名函数,通常在定义后就立即使用,比如当某个函数要求参数也是函数时,就可以用一个匿名函数传递进去,然后那个函数就会立刻调用它了,比如//这段代码用于过滤数组,筛选数组中的所有偶数:
$a1=array(1,2,3,4,5,6,7,8,9);
$a2=array_filter($a1,function($v){
return$v%2==0;
});
print_r($a2);
也可以把匿名函数赋值给一个变量,以后调用这个变量就相当于执行了这个函数:
$f=function($x,$y){
return$x+$y;
};
echo$f(1,2);