如何确保函数返回将是字符串的实例?

时间:2013-03-09 00:03:32

标签: php

我想使用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的实例,没有给出

2 个答案:

答案 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。