我有index.php和function.php。
在index.php中我已经包含了function.php
在index.php中我调用存在于function.php中的
login("Bla","123");
在index.php中我有一个
if (!empty($err)){ foreach(..) echo $err ... }
login() 应该返回一个名为 $err 的数组,(带有 return $err; )如果有任何错误,然后它应该在 index.php 的 foreach 中回显它..
但不知何故我无法让它工作。你不能这样做吗?我没有得到任何回报。
我在登录()中:
$err = array();
$err[] = "Something went wrong";
return $err;
exit();
这里出了什么问题?或者还有其他解决方案吗?
return
return 返回 $err
的 value。它不会使变量
$err
全局可用。
尝试使用:
$err = login('Bla', '123');
将
exit()
替换为 just return;
function login()
{
//Blah
exit();
}
login();
echo 'You shall never see this.';
这就是你应该做的:
$errors = array();
function login($user,$pass)
{
global $errors;
if(empty($user) || empty($pass))
{
$errors[] = "username / Password invalid";
}
//More Checks
//at the end.
if(count($errors) == 0) /*no errors*/
{
return true;
}
}
然后在你的
index.php
if(!login("user","pass"))
{
foreach($errors as $error)
{
echo $error . "<br />";
}
exit();
}
//Successful login
我建议阅读变量范围: http://www.php.net/manual/en/language.variables.scope.php
根据您所说的,您尝试从一个作用域返回一个变量,并在另一个作用域中使用相同的名称使用它,但没有显式设置它。
function login() {
$var = 123;
return $var;
}
login(); // $var won't exist.
$abc = login(); // To login() it is called $var
// but here $abc has the same value as $var inside of login() because it was returned.
// not because it has the same name.
我已经添加了一个答案,但我认为我会添加另一种描述 OOP 方法来做到这一点。
创建一个名为
login.class.php
的文件并创建一个像这样的类
class Login
{
var $username,$password;
public function __cosntruct($username,$password)
{
$this->username = $username;
$this->password = $password;
}
//Checks
public function isValidUsername()
{
return strlen($this->username) > 8;
}
//..Etc
}
然后你可以这样做:
$Login = new Login("Username","Password");
if(!$Login->isValidUsername())
{
echo 'username invalid';
}