2017-01-01 89 views
0

我有一个PHP脚本,从文件fileRead2.php中调用函数fileRead2函数。PHP变量var_dump = NULL?

下面的函数读取username.txt(哪个显示是用户名)。

VIM fileRead2.php

<?php 
function fileRead2() { 
    global $fh, $line;  
    $fh = fopen('username.txt','r'); 
    while ($line = fgets($fh)) { 
     // <... Do your work with the line ...> 
     echo($line); 
    } 
    fclose($fh); 
} 
?> 

如果我上运行的Linux文件系统的Linux命令猫是本届展会的 'tjones'(用户名)。

我运行下面的脚本中。

<?php 
// Read the Username 
require_once('fileread2.php'); 

$userName = fileRead2(); 
echo $userName; 
var_dump($userName); 
>? 

它呼应的$userName该显示器的“tj​​ones”不过的var_dump展示的其作为NULL输出。

是否有任何理由为什么var_dump将$userName变量显示为NULL,当它应该是字符串'tjones'?

我问的原因是因为我需要变量$userName;代码的其他部分,因为它是NULL没有别的工作,我不知道为什么?

+1

'var_dump'输出本身,你不需要用'echo'使用它。 – Matthew

回答

2

你需要修改fileRead2.php使用的return代替echo

<?php 

function fileRead2() { 

global $fh, $line;  

$fh = fopen('username.txt','r'); 

$lineReturn = ""; 

while ($line = fgets($fh)) { 
    // <... Do your work with the line ...> 
    $lineReturn = $line; 
} 
fclose($fh); 

return $lineReturn; 

} 

?> 

echo用于发送信息到标准输出 - 这是什么意思是,如果你在运行一个PHP脚本终端和使用回声,它将被发送到终端(假设你不在其他地方重定向标准输出);如果您使用php脚本生成网页内容,它会将信息输出到浏览器(这是一种简化)。

另一方面,返回函数用于在函数外部向函数外的代码块发送信息。所以在你的情况下,你希望函数fileRead2从username.txt文件中读取,然后返回第一行(用户名),这样你就可以设置一个在函数之外的变量。为了做到这一点,你必须使用return

另外还有一点需要注意的是,如果除了将$ line变量设置为fgets输出并且用户名位于username.txt文件的第一行之外,如果您没有对线进行额外的“工作”不需要一段时间循环。相反,你可以只做$line = fgets($fh);,然后关闭文件并返回$line变量。

+0

返回$行将返回false –

+1

@KrisRoofe谢谢!固定,但我承认这不是最好的结构。我不确定OP在线上究竟做了什么,所以我不确定重构代码是否合理。 – VKK

0

您的函数fileRead2()没有返回子句,所以它返回类型void。并且var_dump()的返回类型也是void

所以

$userName为空,所以echo $userName输出什么。

var_dump($username)将输出NULL。

echo var_dump($userName)什么也没有输出。

并在代码中的readfile2只需添加return $line;将返回false