PHP中print_r、var_export、var_dump用法介绍

在大部分编程语言中,return关键字可以将函数的执行结果返回,PHP中return的用法也大同小异,对初学者来说,掌握PHP中return的用法也是学习PHP的一个开始。

可以看出print_r跟var_export都是可以作为返回值的,只需要把第二个参数设置为true即可

引用返回

奥门新浦京官方网站 1

print_r
(PHP 4 , PHP 5)print_r –  打印关于变量的易于理解的信息。

手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用

首先,它的意思就是返回;return()是语言结构而不是函数,仅在参数包含表达式时才需要用括号将其括起来。当返回一个变量时通常不用括号,这样可以降低PHP的负担。

描述
bool print_r ( mixed expression [, bool return])

当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做:

基本用法:

注: 参数 return 是在 PHP 4.3.0 的时候加上的

function &returns_reference()
{
    static $someref = 0;
    $someref++;
    return $someref;
}
 
$newref = &returns_reference();//引用返回,相当于 $newref = &$someref;
echo $newref; //1
 
奥门新浦京官方网站,$notref = returns_reference(); //值传递的是副本
$newref = 100;
echo $notref; //2
 
$newref = 100;
echo returns_reference(); //101

a)、return expression // 返回一个表达式结果

print_r() 显示关于一个变量的易于理解的信息。如果给出的是
string、integer 或 float,将打印变量值本身。如果给出的是
array,将会按照一定格式显示键和元素。object 与数组类似。

可见,想让函数返回引用,必须在函数申明和赋值时都带上&操作符。
对于类中方法也是如此:

b)、return(expr) // 函数表达式

记住,print_r() 将把数组的指针移到最后边。使用 reset()
可让指针回到开始处。

class foo {
    public $value = 0;
 
    public function &getValue() {
        return $this->value;
    }
}
 
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to
$obj->value, which is 42.
$obj->value = 2;
echo $myValue;

c)、return // 直接返回,或返回空值

 

一些简单的例子

注意:最好不要用return($val)这种方式。

 代码如下

看下面的简单例子,尝试去理解引用返回。

1、如果执行了return,则return 语句后面的内容将不会被执行了;

<pre>
<?php
$a = array (‘a’ => ‘apple’, ‘b’ => ‘banana’, ‘c’ => array
(‘x’,’y’,’z’));
print_r ($a);
?>
</pre> 

<?php

function add($a,$b){
 return $a+$b;
 return $a*$b;
}
$c = add(5,3);//得到的$c值可以用在程序的其他地方!
echo $c;

上边的代码将输出:

function &test()
{
 // 声明一个静态变量
    static $b = 0;

输出结果:8,只执行$a+$b,$a*$b没有被执行。

 代码如下

    $b = $b+1;
    echo $b;
    return $b;
}

2、return 可以是函数返回值,也可以返回一个空值,这要看具体用法,例如:

<pre>
Array
(
    [a] => apple
    [b] => banana
    [c] => Array
        (
            [0] => x
            [1] => y
            [2] => z
        )
)
</pre>

$a = test(); //这条语句会输出 $b 的值为 1

function test($a){
if($a>10){
 return "a>10";
}else{
 return "a<10";
}
$b=45;
$c=$b-$a;
echo $c;
}

 

$a = 5;
$a = test(); //这条语句会输出 $b 的值为2

在这个例子当中,当你调用这个函数的时候,然后给一个任何的数字,它都会返回一个字符串,而代码:

如果想捕捉 print_r() 的输出,可使用 return 参数。若此参数设为
TRUE,print_r() 将不打印结果(此为默认动作),而是返回其输出。

$a = &test(); //这条语句会输出 $b 的值为3

$b=45;
$c=$b-$a;
echo $c;

 

$a = 5;
$a = test(); //这条语句会输出 $b的值 为6

将永远不会被执行。

例子 1. return 参数示例

?>
程序运行结果:

3、关于return的调用。

 代码如下

1
2
3
6

a.php如下:

<?php
$b = array (‘m’ => ‘monkey’, ‘foo’ => ‘bar’, ‘x’ => array (‘x’,
‘y’, ‘z’));
$results = print_r ($b, true); //$results 包含了 print_r 的输出结果
?> 
 

尽管函数声明方式是 function &test() 这样,但我们通过这种方式 $a = test()
的函数调用得到的其实不是函数的引用返回,这跟普通的函数调用没有区别。PHP
规定通过 $a = &test() 这种方式得到的才是函数的引用返回。
用上面的例子来解释就是,$a = test() 这种方式调用函数,只是将函数的值赋给
$a 而已,而$a做任何改变都不会影响到函数中的$b。

<?php
include("b.php");
echo "a";
?>

 

而通过 $a = &test() 方式调用函数呢,它的作用是将 return $b 中的 $b
变量的内存地址与 $a
变量的内存地址指向了同一个地方。即产生了相当于这样的效果 ($a=&$b),
所以改变 $a 的值也同时改变了 $b 的值。所以在执行了

b.php如下:

注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r()
的输出,可使用输出控制函数。

$a = &test();
$a = 5;
以后,$b的值变为了5。

<?php
echo "b";
return;
?>

注: 在 PHP 4.0.4 之前的版本中,如果给出的 array 或 object
包含了直接或间接指向自身的引用,print_r()
将永远继续下去。print_r($GLOBALS) 就是一个例子,因为 $GLOBALS
自身即是全局变量,其包含了指向自身的引用。

再来个程序例子加深理解:

输出结果: ba。

 

<?php
/*
**
值传递和引用传递,值传递传递的是值的一个复本,引用传递传递的是值指向的内存地址
*/

a.php如下:

var_export
(PHP 4 >= 4.2.0, PHP 5)var_export – 输出或返回一个变量的字符串表示

// 函数的引用,定义时也要加上 &
function &func($a,$b){  
 // 这里为了更直观看到效果,定义一个静态变量
 static $result = 0;   
 $result+=$a+$b;
 echo $result.'<br />’;
 return $result;
}
 
$a = $b = 10;

<?php
include("b.php");
echo "a";
?>

描述
mixed var_export ( mixed expression [, bool return])

//
PHP里这样写函数的引用调用,和调用普通函数没有区别(只是将函数的返回值复制给$c这个变量,$c做任何改变不会影响上面函数中的$result)
// 要记住:PHP里的函数引用定义及调用都要在函数名前加上 &
$c = func($a,$b);
// 第一次执行func(),其静态变量$result的值变为 20(10+10)

b.php如下:

此函数返回关于传递给该函数的变量的结构信息,它和 var_dump()
类似,不同的是其返回的表示是合法的 PHP 代码。

// 改变$c的值,不会对下面一行语句产生影响
$c = 666; 
// 第二次执行func(),其静态变量$result的值变为 40(20+10+10)
$c = func($a,$b);

<?php
echo "b";
exit; // 结束整个当前脚本
?>

您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。

echo ‘<hr />’;

输出结果:a。

比较 var_export() 和 var_dump().

// 这样才是PHP中引用函数的调用方式
$d = &func($a,$b); 
// 第三次执行func(),其静态变量$result的值变为 40(40+10+10)
$d = 888;
// 第四次执行func(),其静态变量$result的值变为 908(888+10+10)
$d = func($a,$b);

4、return的一个重要作用:返回值

 

?>

例子1:

 代码如下

 

function test(){
 $a=array(1,2);
 return $a;
}
$b=test();
print_r($b);

<pre>
<?php
$a = array (1, 2, array (“a”, “b”, “c”));
var_export ($a); /* 输出:
array (
0 => 1,
1 => 2,
2 =>
array (
0 => ‘a’,
1 => ‘b’,
2 => ‘c’,
),
)
*/

例子2:

$b = 3.1;
$v = var_export($b, TRUE);
echo $v;

function test(){
 $a=array(1,2);
}
$b=test();
print_r($b);

/* 输出:
3.1
*/
?>
</pre>

输出结果:例子1正常输出,例子2输出为空。为什么呢?因为如果不在函数rest()里面用return返回值,则函数里面只有过程,而没有结果给rest(),调用该函数的时候当然不会有值输出。当然,我们也可将print_r($b)写进test()里面,直接在函数里打印,但很多时候,我们都会在函数外面调用操作,所以要用return返回一个值给外面。

 

希望本文所述对大家的php程序设计有所帮助。

  var_dump
(PHP 3>= 3.0.5, PHP 4 , PHP 5)var_dump – 打印变量的相关信息

描述
void var_dump ( mixed expression [, mixed expression [, …]])

此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

提示:
为了防止程序直接将结果输出到浏览器,您可以使用输出控制函数(output-control
functions)来捕获函数的输出,并把它们保存到一个 string 型的变量中。

可以比较一下 var_dump() 与 print_r()。

 

例子 1. var_dump() 示例

 代码如下

<pre>
<?php
$a = array (1, 2, array (“a”, “b”, “c”));
var_dump ($a); /* 输出:
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) “a”
[1]=>
string(1) “b”
[2]=>
string(1) “c”
}
}*/

 

$b = 3.1;
$c = TRUE;
var_dump($b,$c);

/* 输出:
float(3.1)
bool(true)*/

?>
</pre>

 
 
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注