php闭包函数this
A. php有办法在闭包外部得到闭包内部的变量吗
php
有闭包函数么?好像么有吧,你可能是想问以下两种情况
一。外部访问类的私有变量,可以使用
__get()方法
class
test{
private
$b
=
10;
function
__get($name){
return
$this->$name;
}
}
$a
=
new
test();
echo
$a->b;
二.方法内部访问全局变量
可以使用global
关键字
$b
=
10;
function
test(){
global
$b;
echo
$b;
}
B. Php7有哪些新特性
PHP 7.4 的主要特性包括以下几个,
短闭包函数(short closure) 预加载提交性能 属性类型限定 Improved type variance(不会翻译) 三元运算简写 数组展开运算 新增类的魔术方法:serialization 数字分隔符 运算优先顺序 允许在__toString中抛出异常 支持反射引用 新增字节分割函数 移除php短标签 弃用左关联运算符 不再向后兼容的变更 短闭包函数短闭包函数可以减少冗余代码:
array_map(function (User $user) { return $user->id; }, $users) array_map(fn(User $user) => $user->id, $users)需要注意几点:
短闭包可以直接访问闭包函数外面的变量,所以不需要再写?use?关键词 以fn关键词开始 $this?可以像普通的闭包一样使用 短闭包只有一行代码,仅仅做返回声明使用,不允许使用return?关键词还可以使用更严格类型的方式
$ids = array_map(fn(User $user): int => $user->id, $user); 预加载PHP预加载可以极大的提高性能
优点:在PHP 7.4以前,如果你使用了框架来开发,每次请求文件就必须加载和重新编译。预加载在框架启动时在内存中加载文件,而且在后续请求中永久有效。
缺点:性能的提升会在其他方面花费很大的代价,每次预加载的文件发生改变时,框架需要重新启动。
属性类型限定 class A { public string $name; public Foo $foo; }不得不说,PHP越来越接近Java等强类型语言
Improved type variance协变返回类型:
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } }依赖(是不是很熟悉):
class ParentType {} class ChildType extends ParentType {} class A { public function covariantReturnTypes(): ParentType { /* … */ } } class B extends A { public function covariantReturnTypes(): ChildType { /* … */ } } 简写三元运算符在目前> PHP 7以后的写法:
$data['date'] = $data['date'] ?? new DateTime(); 在PHP 7.4你可以这样写: $data['date'] ??= new DateTime(); 数组展开运算合并数组到另一个数组中,返回一维数组
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]注意? :只对数字索引有效
新增类的魔术方法RFC添加了两个新的魔术方法__serialize和__unserialize
数字分隔符允许使用下划线更直观的分隔数值
$unformattedNumber = 107925284.88; $formattedNumber = 107_925_284.88; 运算优先顺序PHP 7.4之前,如果你这样写:
echo "sum: " . $a + $b; PHP会解析为: echo ("sum: " . $a) + $b; PHP 8将会解析为: echo "sum :" . ($a + $b); __toString中抛出异常支持反射引用PHP 7.4将会新增ReflectionReference?类
移除php短标签<?将会在PHP 8中移除,<?=会继续保留
弃用左关联运算符PHP遗留了一些奇怪的怪癖,比如
1 ? 2 : 3 ? 4 : 5; // 将会在 PHP 7.4 中废弃,在 PHP 8中会抛出编译错误 (1 ? 2 : 3) ? 4 : 5; // 正确 不再向后兼容的变更 弃用在没有父类的情况下调用parent:: 调用var_mp打印DateTime和DateTimeImmutableshi’实例,将不再保留对象上的可访问属性 openssl_random_pseudo_bytes?会在调用错误时抛出异常 序列化PDO和PDOStatement?实例将会生成一个Exception而不是PDOException异常 调用get_object_vars()打印ArrayObject?实例将会返回ArrayObject?自己的属性,而不是被包裹的数组或对象的值,数组强制转换不受影响
C. php网站,代码有一段不知道什么意思,求大神帮忙(代码如下)
网友采纳的那个回答是个毛线啊?就给你把这段js做了一下格式化。我来给你解释一下吧:
这个代码是前端的JS代码,PHP是后端语言,这个代码跟PHP没有卵关系;
这个代码不是病毒木马代码,检测工具检测出来红色大概是因为这个是放在了注释CDATA块里。注释CDATA块其实是因以前的低端浏览器不识别JS代码而生的,现在完全没必要再注释掉了;
你还是不放心的话,那我告诉你,这个代码是给你隐藏你的真实邮箱的。因为很多发送垃圾邮件的人甚至搜索引擎,都会用爬虫扫描各个网站的邮箱(因为邮箱格式特征很明显),扫到之后就给你发垃圾邮件。所以这个代码是由PHP简单的加密之后写到页面上一串16进制数字,然后用JS解密出来,爬虫就扫不到你邮箱了,就这么简单。
也许采纳的那位哥们不服,说这么一段代码看不出什么来。那好,我说说每一行的意思。
D. php方法中如何获取闭包的值
亲,你好,很高兴为你解答该问题
首先,你的这个写法是有问题的哦!~
classA{
publicfunctionaa(){
//函数体为空,所以外面不会有任何输出,即使设置变量来接受该方法,也不会有任何返回
//所以你肯定拿不到123
}
}
$a=newA;
$a->aa(function(){//aa方法是不接受任何参数的,这个传了闭包进去
return123;
});
要想拿到闭包中的123,你需要这样写才可以呦~~
classA{
publicfunctionaa($closure){//aa方法接受一个闭包函数进来
return$closure(123);//调用闭包函数,传入相应参数,并将闭包返回的值再次返回出去
}
}
$a=newA;
$b=$a->aa(function($param){//给aa传入一个带一个参数的闭包
return$param;//闭包方法返回传入的参数
});
var_mp($b);
希望可以帮到你,给我个采纳呦!~~
E. php 什么时候使用闭包
当一个函数需要使用另一个函数内的变量的时候 闭包简单来说就是能够读取其他函数内部变量的函数。
F. php闭包函数用use传参有什么意义
PHP语法对于全局变量和局部变量分得太清楚,这里不讨论它好与不好,但确实使用起来比较麻烦。在函数里面调用全局变量,必须global声明以后,才能使用,其它的语言貌似都能直接用。而use在这里的用法,就是解决这个问题的,有时候不但要传参数进来,还要调用局部变量进行计算或判断。举个例子,你也许更明白:
<?php
functiongetMoney($cny){
$usd=6;//这个局部变量,想在闭包里面用,必须放到use里
$func=function($jpy)use($cny){
echo$cny.'<br>';//10
echo$jpy.'<br>';//0.1
echo$usd;//否则就报错,Undefinedvariable:usd
};
$func(0.1);
}
getMoney(10);
G. 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会为每个遗漏的参数发出警告
可变函数:使用可变变量,可以基于变量的值调用函数
匿名函数:又叫闭包函数,允许临时建立一个没有指定名称的函数,最经常用作回调函数参数的值。需要注意的是,在匿名函数内的变量的用法不同于全局变量,在匿名函数内的变量是一个闭包变量,另外,被调用闭包的作用域不必是相同的。
H. 解释下php函数的意思$this->是干嘛呢
$this 是个伪变量,可以理解为“当前对象”,主要是为了类定义的内部访问自身的函数和变量。
I. PHP中的闭包有什么用处
闭包其实就是外部函数定义的内部函数。
闭包的作用及好处:闭包给访问外部函数定义的内部变量创造了条件。也将关于函数的一切封闭到了函数内部,减少了全局变量,这也是闭包的真实含义。
J. PHPMailer中看到的的php函数中使用$this->$value的问题,重点是后面那个美元符
这是所谓的“可变变量”,你这么试一下就知道是怎么回事了:
class A{
public $name = "张三";
public $age = 19;
public $sex = 'man';
}
$a = "name";
$b = "age";
$c = "sex";
$user = new A();
echo $user->$a;//张三
echo $user->$b;//19
echo $user->$c;//man
实际上这里并不是取$user的a,b,c成员变量,而是取$user的($a)这个变量,而$a就是"name" ,所以$user->$a就是$user->name