php函数的传值如果需要引用传递注意的细节

 

Strict standards: Only variables should be passed by reference

网上查到资料有这么一句话:

在php5.3以上版本会出这个问题,应该也和php的配置有关,只要把这一句拆成两句就没有问题了。因为array_walk的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值。当然你也可以修改php.ini 里的 error_reporting = E_ALL | E_STRICT,但这终究不符合规范。

 

    
     $suffix =  array_pop(explode(".",$file_name));

为什么高版本的会这样子限制呢?

 

 

我去看手册中的函数原型:

 

mixed array_pop ( array &$array )

 

bool array_walk ( array &$array , callable $funcname [, mixed $userdata = NULL ] )

 

&符号指定了变量传入进去,是引用方式传递。

 

改为:

     $file_name_arr  = explode(".",$file_name);
     $suffix =  array_pop($file_name_arr);

 

就可以。

 

实际上也只是报出一个警告。不是致命错误。正常结果是能够得到。比如这里得到文件名的后缀,是正常的。

 

时间: 2024-10-16 15:25:08

php函数的传值如果需要引用传递注意的细节的相关文章

php函数传值的引用传递注意事项分析_php技巧

本文实例讲述了php函数传值的引用传递注意事项.分享给大家供大家参考,具体如下: Strict standards: Only variables should be passed by reference 网上查到资料有这么一句话: 在php5.3以上版本会出这个问题,应该也和php的配置有关,只要把这一句拆成两句就没有问题了.因为array_walk的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值.当然你也可以修改php.ini 里的 error_reporting

java及C++中传值传递、引用传递和指针方式的理解_java

java的值传递理解: 代码1: public class Test { /** * @param args */ public static void main(String[] args) { StringBuffer buffer= new StringBuffer("colin"); SChange(buffer); System.out.println( buffer); } public static void SChange (StringBuffer str) { st

php函数的传值与传址(引用)详解

php中引用的用法: 1. 变量的引用赋值: $a = &$b 2. 函数调用时的引用参数传递     1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);     2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);        注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_refer

源自一个面试的问题:字符串在函数的参数中是当成值传递还是引用传递。

问题描述 源自一个面试的问题:字符串在函数的参数中是当成值传递还是引用传递.这是测试方法: public void setA(String a) { System.out.println("In the setmethod before set:解决方案二:# " + a); a = "I am a student"; System.out.println("In the setmethod after set:解决方案三:# " + a); }

浅谈JavaScript 函数参数传递到底是值传递还是引用传递_javascript技巧

在传统的观念里,都认为JavaScript函数传递的是引用传递(也称之为指针传递),也有人认为是值传递和引用传递都具备.那么JS的参数传递到底是怎么回事呢?事实上以下的演示也完全可以用于Java 首先来一个比较简单的,基本类型的传递: function add(num){ num+=10; return num; } num=10; alert(add(num)); aelrt(num); //输出20,10 对于这里的输出20,10,按照JS的官方解释就是在基本类型参数传递的时候,做了一件复制

java中的引用传递-Integer 对象在函数之间的引用传递起不到全局的作用

问题描述 Integer 对象在函数之间的引用传递起不到全局的作用 //实现排序二叉树的第k个节点的查找 TreeNode target = KthNode(p2); public static TreeNode KthNode(TreeNode pRoot int k) { if(pRoot == null || k < 1 ){ return null; } //ArrayList<Integer> list = new ArrayList<Integer>(); //l

php函数间的参数传递(值传递/引用传递)_php技巧

php:函数间的参数传递 1.值传递 复制代码 代码如下: <?php function exam($var1){ $var1++: echo "In Exam:" . $var1 . "<br />"; } $var1 = 1; echo $var1 . "<br />"; exam($var1); echo $var1 . "<br />"; ?> -------------

理解Java中的引用传递和值传递

关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论. >>基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型. 基本类型的变量保存原始值,即它代表的值就是数值本身: 而引用类型的变量保存引用值,"引用值"指向内存空间

C++中的值传递,引用传递及指针传递

C++的值传递,引用传递,指针传递这些概念一直是困扰C++程序员,我一直也没有一个能说清他们之间的关系通过一个简单的实例,或者说浅显的说法,找了一些相关资料,和自已的个人感受,简单介绍一下. c++中传递参数的方式有三种:传参数的值(称为值传递,简称传值),传参数的地址(称为地址传递,简称为传址),和引用传递(简称为传引用),相应的函数也就是传值调用,传址调用和传引用调用 函数定义时参数表中的参数称为形式参数,简称形参,函数调用时参数表中的参数称为实际参数,简称实参,实参和形参之间的数据传递称为