CakePHP,三重等号的误解

时间:2014-11-19 12:37:45

标签: php cakephp

您好我正在使用CakePHP制作一些教程,当我查看if语句时,我陷入困境。

请查看带有三等号的if语句。

class Item extends AppModel{
protected function _processFile(){
    $file = $this->data['Item']['file'];
    if($file['error'] === UPLOAD_ERR_OK){
        $name = md5($file['name']);
        $path = WWW_ROOT.'files'.DS.$name;
        if(is_uploaded_file($file['tmp_name']) &&
            move_uploaded_file($file['tmp_name'],$path)){

            $this->data['Item']['title_img'] = '/files/'.$name;
            unset($this->data['Item']['file']);
            return true;
        }
    }
    return false;

这是我的问题

为什么if语句在上传文件时出错会执行其余的代码来上传文件?

其余代码是否应该“返回false;”?

请让我知道我错过了解if语句。

谢谢你们

3 个答案:

答案 0 :(得分:2)

这是基本的php,与CakePHP无关:请参阅http://php.net/manual/en/language.operators.comparison.php以及此链接http://php.net/manual/en/types.comparisons.php

$a == $b    Equal       TRUE if $a is equal to $b after type juggling.
$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type.

您正在根据类型进行比较,尝试==而不是===。 php不是严格的类型语言,这就是为什么我们有==和===。

一些额外内容:

  • 而是$this->data['Item']在模型中使用$this->data[$this->alias]
  • 关注CakePHP coding conventions
  • 您不应只检查文件是否已上传,还应处理错误案例

如果您不想重新发明轮子,可以查看我的FileStorage插件或查看它的代码。

答案 1 :(得分:1)

UPLOAD_ERR_OK等于0,实际上意味着上传文件时没有错误。

答案 2 :(得分:1)

this === means that $file['error'] === UPLOAD_ERR_OK具有相同的类型。 他们有相同的吗?或者$ file ['error']是一个字符串。

尝试2个等待。