我想使用FILTER_VALIDADE_EMAIL,但它会给我一个警告,说它需要一个字符串。我是php的新手,我在尝试使用OO时遇到了麻烦。
<?php
Class User {
private $id;
private $login_name;
private $hashed_password;
private $email;
public function __construct($login_name, $email){
$this->login_name = $login_name;
$this->email = $email;
}
public function getLoginName(){
return $this->login_name;
}
public function setLoginName(String $login_name){
$this->login_name = $login_name;
}
public function setEmail(String $email){
$this->email = $email;
}
public function getEmail(String $email){
return (string) $this->email;
}
}?>
<?php
include("../lib/php/User.php");
class UserDAO {
private $user;
public function __construct(){
}
public function getUser(){
return $this->user;
}
public function setUser(User $user){
$this->user = $user;
}
public function insertUser(User $user){
$email = $user->getEmail();
$login_name = $user->getLoginName();
//ver http://www.php.net/manual/en/function.filter-var.php
if(filter_var($email, FILTER_VALIDATE_EMAIL) && empty($login_name)){
echo "valid user";
}
}
}
$user = new User("user","user@gmail.com");
$userDAO = new UserDAO();
$userDAO->insertUser($user); ?>
返回的错误是
PHP Catchable致命错误:传递给User :: getEmail()的参数1必须是String的实例,没有给出
答案 0 :(得分:1)
PHP与JavaScripts typeof
函数非常相似,它的名称为gettype
。
来自PHP docs site:
返回PHP变量var的类型。对于类型检查,请使用is_ * functions。
Info about this function can be found here.
使用此功能,您可以检查您的功能,如果它返回“字符串”的类型,或您希望的任何其他数据类型。
由于(string)
不是PHP中的对象,因此您无法检查它是否是字符串的实例,除非您为此目的创建自定义String Class/Object
,这非常容易。
来自PHP文档网站的gettype
的基本示例:
$data = array(1, 1., NULL, new stdClass, 'foo');
foreach ($data as $value) {
echo gettype($value), "\n";
}
此示例的示例输出为:
integer
double
NULL
object
string
答案 1 :(得分:0)
在类型提示为String的任何位置删除type hinting。字符串不能用于类型提示。同样适用于Int。