【发布时间】:2017-08-14 20:28:43
【问题描述】:
我正在尝试实例化一个将参数传递给构造函数的 PHP 类,但是当我打印数据时,值是空的。
传递给 configuracaoBancoDados.php 的 POST 数据接收没有问题,但是当我从 BancoDadosClass.php 创建 BancoDados class 时,将参数传递给构造函数并尝试使用 voltaValor() method 打印此参数,所有数据都是空。
configuracaoBancoDados.php
<?php
include("../../../classes/BancoDadosClass.php");
if(isset($_POST["acao"]) && $_POST["acao"] == "criarBancoDados") {
$host = $_POST["enderecoServidor"];
$nomeBD = $_POST["nomeBD"];
$prefixoTabelasBD = $_POST["prefixoTabelasBD"];
$usuarioBD = $_POST["usuarioBD"];
$senhaBD = $_POST["senhaBD"];
$bancoDados = new BancoDados($host, $usuario, $senhaBD, $nomeBD, $prefixoTabelas);
echo $bancoDados->voltaValor();
} else {
echo "Ação não definida";
}
?>
BancoDadosClass.php
<?php
class BancoDados {
var $host;
var $usuario;
var $senha;
var $nomeBancoDados;
var $prefixoTabelas;
var $conexao;
function __construct($hostBD, $usuarioBD, $senhaBD, $nomeBD, $prefixoTabelasBD) {
$this->host = $hostBD;
$this->usuario = $usuarioBD;
$this->senha = $senhaBD;
$this->nomeBancoDados = $nomeBD;
$this->prefixoTabelas = $prefixoTabelasBD;
}
function voltaValor() {
return "Dados: " . $host . " " . $nomeBancoDados . " " . $prefixoTabelas . " " . $usuario . " " . $senha;
}
function conectar() {
$retorno = true;
$this->conexao = mysqli_connect($host, $usuario, $senha);
if(!$this->conexao) {
$retorno = false;
}
return $retorno;
}
function desconectar() {
mysqli_close($this->conexao);
}
}
?>
【问题讨论】:
-
您需要使用
$this->host等,而不仅仅是$host等。 -
另外,你应该停止编写“PHP 4”代码......决定你的类属性的可见性!鉴于其中一些存储数据库凭据,它们很可能不应该是公开的。
-
var是自 PHP 4 以来的遗留物。改用可见性,例如protected $host:等...您还应该在方法上设置可见性。 -
好的。我会这样做的。
标签: php class constructor