两个PHP类:只应通过引用传递变量

时间:2016-01-20 08:57:31

标签: php

我有父类和子类PHP类。我不能在mysqli语句中使用父类中的变量作为绑定变量(php将其视为常量?)。请帮帮我 看

<?php
class cparent{
    public $var1;
    public function __construct(){
        $this->var1 = 1;
    }
}
class cchild extends cparent{
    private $mysqli;
    public function __construct(){
        parent::__construct();  
    }
    public function getVar1(){
        return $this->var1;
    }
    public function some_mysqli_func(){
        if (!$stmt = $this->mysqli->prepare("INSERT INTO bla(var) VALUES (?)")){
                echo 'Error: ' . $this->mysqli->error;
                return false;
        }
        $stmt->bind_param('i', $this->var1);
        $stmt->execute();
    }
}
$child = new cchild();
echo $child->getVar1(); //ок
$child->some_mysqli_func(); // Only variables should be passed by reference php
?>

1 个答案:

答案 0 :(得分:2)

这是罪魁祸首:

$stmt->bind_param('i', $this->var1);

bind_param()方法通过引用进行赋值,只能通过变量来完成。从技术上讲,$this->var1是一种财产。您可以使用临时变量:

$var1 = $this->var1;
$stmt->bind_param('i', $var1);

只需使用PDO

即可避免此类问题
$statement->bindValue(':var', $this->var1);

这将通过复制绑定,而不是通过引用绑定,并且应该为您提供更多的灵活性。