1.   阿里云服务器1888元代金券领取
  2.   本网站所有源码包解压密码:www.youhutong.com
登录  帮助问答

PHP function use使用方法(闭包使用)

小川 技术文章
郑重声明:
  本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,否则后果请用户自负,下载后请24小时内删除。 本站所有内容均不能保证其完整性,不提供任何技术支持,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用。

PHP  function use使用方法(闭包使用):


案例源码:

<?php

function smsf(){
    return 'xc';
}

function to_oss($obj, $ject=null)
{
    if( is_object($obj) ) {
        $sms = smsf();
        $upAction = function($field, $name, $tmpName) use($sms, $ject)
        {
            if($field == $sms) return $sms.'99';
            return $field;
        };

        $files = ['logo'=>'thumb.jpg','thumb'=>'lo.go.png','xc'=>'logo.jpg'];
        $data = [];
        foreach($files as $k => $v){
            $str = $upAction($k, $v, $v);
            $data[] = $obj($str).strtolower(strrchr($v, '.'));
        }
        return $data;
    }
}
$upload = to_oss(function($key){
            switch($key){
                case 'thumb':
                    $path = 'thumb11111111';
                    break;
                case 'logo':
                    $path = 'logo22222222';
                    break;
                case 'xc99':
                    $path = 'xc9922222222';
                    break;
            }
            return $path;
        });

# Array ( [0] => logo22222222.jpg [1] => thumb11111111.png [2] => xc9922222222.jpg ) 
print_r($upload); 

?>





另外可能需求用到的PHP函数:


extract():

定义和用法

extract() 函数从数组中将变量导入到当前的符号表。

该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突。

该函数返回成功导入到符号表中的变量数目。

语法

extract(array,extract_rules,prefix)
参数描述
array必需。规定要使用的数组。
extract_rules

可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。

可能的值:

  • EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。

  • EXTR_SKIP - 如果有冲突,不覆盖已有的变量。

  • EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix

  • EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix

  • EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix

  • EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。

  • EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。

  • EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。

prefix

可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。

前缀和数组键名之间会自动加上一个下划线。

技术细节


返回值:返回成功导入到符号表中的变量数目。
PHP 版本:4+
更新日志:

extract_rules 的值 EXTR_REFS 是在 PHP 4.3 中新增的。

extract_rules 的值 EXTR_IF_EXISTS 和 EXTR_PREFIX_IF_EXISTS 是在 PHP 4.2 中新增的。

自 PHP 4.0.5 起,该函数返回成功导入到符号表中的变量数目。

extract_rules 的值 EXTR_PREFIX_INVALID 是在 PHP 4.0.5 中新增的。

自 PHP 4.0.5 起,extract_rules 的值 EXTR_PREFIX_ALL 也包含数字变量。

例子1:使用所有参数


<?php
$a = "Original";
$my_array = array("a" => "Cat", "b" => "Dog", "c" => "Horse");extract($my_array, EXTR_PREFIX_SAME, "dup");

echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a";
?>



array_walk:


定义和用法

array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。

注释:您可以通过把用户自定义函数中的第一个参数指定为引用:&$value,来改变数组元素的值(参见实例 2)。

提示:如需操作更深的数组(一个数组中包含另一个数组),请使用 array_walk_recursive() 函数。

语法

array_walk(array,myfunction,userdata...)
参数描述
array必需。规定数组。
myfunction必需。用户自定义函数的名称。
userdata,...可选。规定用户自定义函数的参数。您能够向此函数传递任意多参数。

说明

array_walk() 函数对数组中的每个元素应用回调函数。如果成功则返回 TRUE,否则返回 FALSE。

典型情况下 myfunction 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata ,将被作为第三个参数传递给回调函数。

如果 myfunction 函数需要的参数比给出的多,则每次 array_walk() 调用 myfunction 时都会产生一个 E_WARNING 级的错误。这些警告可以通过在 array_walk() 调用前加上 PHP 的错误操作符 @ 来抑制,或者用 error_reporting()。

注释:如果回调函数需要直接作用于数组中的值,可以将回调函数的第一个参数指定为引用:&$value。(参见例子 3)

注释:将键名和 userdata 传递到 myfunction 中是 PHP 4.0 新增加的。

技术细节

返回值:如果成功则返回 TRUE,否则返回 FALSE。
PHP 版本:4+

例子1:设置一个参数

<?php
function myfunction($value,$key,$p)
{
echo "$key $p $value<br>";
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");array_walk($a,"myfunction","has the value");
?>

例子2:更改一个数组元素的值(请注意 &$value)

<?php
function myfunction(&$value,$key)
{
$value="yellow";
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");array_walk($a,"myfunction");
print_r($a);
?>


 浏览器启用弹出窗口过滤功能,将无法跳转到下载页。在浏览器地址栏右边符号提示处点击允许就可以了!

转载请注明来源地址:小川编程 » https://www.youhutong.com/index.php/article/index/161.html


  1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
  2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
  3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
  4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意
( 0 )个小伙伴在吐槽
    登录帐号  如果已经登录请刷新! 发表我的评论
    表情