在oop中按类接收返回值

时间:2014-06-26 01:09:30

标签: php oop

我有一个这样的课程:

<?php
class connection {
    public $db;

    public function __construct() { 
    $this->db = new mysqli('localhost', 'root', '', '');

    if($this->db->connect_errno > 0){
        die('error ' . $this->db->connect_error);
    }
    $this->db->set_charset("utf8");
    }

}

class masssave extends connection {
    public $sql;
    public function insert_all {
    // do some works
            if ( $sql = $this->db->query("INSERT INTO $db_name ($str_db_value) values ($str_form_value_found) ")) {
            return true;    
            }
            else {
            return false;
            }
    }


}
?>

masssave班级中我将$sql设为公开,现在我想在某些页面中使用此类,例如注册页面

$save = new masssave;
if ( $save->sql = true ) {
    echo 'ok';
} 
else {
    echo 'failed';
}

但是上面的代码不起作用,即使查询失败也总是echo 'ok'

我也使用if ( $save->sql == true ),但此代码始终为echo 'failed'

我是oop的新手,但我认为我的php课程没问题,我认为我做错了检查返回值的方法

3 个答案:

答案 0 :(得分:3)

  1. $sql = $this->db->query替换为$this->sql = $this->db->query - $sql - 局部变量。 $this->sql - 对象属性
  2. $save = new masssave;使用$save->insert_all()
  3. 后调用正确的方法
  4. 使用比较(但不是分配)$save->sql = true - 分配,$save->sql == true - 比较。 Assigment重新计算变量的值,因此$save->sql = true始终为真。

答案 1 :(得分:0)

这一行应该是......

if ( $save->insert_all() == true )

因为....首先,你只是检查是否设置了$ save-&gt; sql,在你的情况下它总是会回显。

你甚至不检查你实际上是在设置(= vs ==)

$save = new masssave;
if ( $save->sql = true ) 

应该......

$save = new masssave;
if ( $save->sql == true ) {

但是无论如何总会返回true,因为它只是检查变量是否存在,它确实存在。你真正想要的是我在顶部发布的内容。因为查询实际上在insert_all函数内部,这是您返回true或false的位置。

答案 2 :(得分:0)

始终echo ok,因为您将$save->sql设置为true

if ( $save->sql = true ) {

以上是一个很大的 NO NO

您想要比较它,因此使用==来比较值

if ( $save->sql == true ) {

这样做会更简单:

if($save->sql) {
    echo 'ok;
} else {
    echo 'fail';
}

上述if支票基本上是IF(TRUE) { SAY OK} ELSE { SAY FAIL}

相关问题