当前位置:首页 » 编程语言 » php闭包函数this

php闭包函数this

发布时间: 2022-09-15 12:35:52

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做了一下格式化。我来给你解释一下吧:

  1. 这个代码是前端的JS代码,PHP是后端语言,这个代码跟PHP没有卵关系;

  2. 这个代码不是病毒木马代码,检测工具检测出来红色大概是因为这个是放在了注释CDATA块里。注释CDATA块其实是因以前的低端浏览器不识别JS代码而生的,现在完全没必要再注释掉了;

  3. 你还是不放心的话,那我告诉你,这个代码是给你隐藏你的真实邮箱的。因为很多发送垃圾邮件的人甚至搜索引擎,都会用爬虫扫描各个网站的邮箱(因为邮箱格式特征很明显),扫到之后就给你发垃圾邮件。所以这个代码是由PHP简单的加密之后写到页面上一串16进制数字,然后用JS解密出来,爬虫就扫不到你邮箱了,就这么简单。

  4. 也许采纳的那位哥们不服,说这么一段代码看不出什么来。那好,我说说每一行的意思。

    1. 首先是个闭包,懂前端的人都知道。

    2. 然后try一下,是为了谨慎,免得IE弹出页面脚本有错误。

    3. 然后获取document.currentScript标签。如果没有这个属性的话,就用原始的方法来做,这里又是一个自执行函数(闭包)。

    4. 拿到当前的script标签,那前一个恰好就是加密标签了,邮箱就在这个标签的data-cfemail属性中,将这个标签保存成变量为c。

    5. 然后就是解密了。

      1. 解密算法很简单,就是一串16进制串,两两读取。

      2. 前两个读出来作为密钥

      3. 从后面每两个读出来,和密钥做异或,之后的值用ASCII读出字母

      4. 这些字母拼出来的就是你的邮箱

    6. 解密之后创建一个文本节点替换掉原来的加密标签,就完成了

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

热点内容
java字符串个数统计 发布:2025-01-11 22:45:05 浏览:541
完美国际2捏脸数据库 发布:2025-01-11 22:45:04 浏览:279
php淘宝互刷平台源码 发布:2025-01-11 22:43:49 浏览:215
剑侠情缘缓存怎么清理 发布:2025-01-11 22:33:56 浏览:316
win7旗舰版怎么设置密码 发布:2025-01-11 22:21:09 浏览:144
被害人访问 发布:2025-01-11 22:06:24 浏览:366
朋友圈上传长视频方法 发布:2025-01-11 22:01:41 浏览:357
我的世界ice服务器被炸罚款 发布:2025-01-11 21:54:36 浏览:725
linuxphpini配置 发布:2025-01-11 21:54:35 浏览:481
tp图片压缩 发布:2025-01-11 21:53:52 浏览:632