PHP:为什么这些公共初始化的变量没有定义?

时间:2018-09-26 04:48:31

标签: php rest api

当我尝试分配获取的值时,我试图从数据库中获取一些数据以JSON文件形式显示

  

注意:未定义的变量:第24行的C:\ wamp64 \ www \ wsTest \ usuario \ read.php中的ID

这是用户类别:

<?php

Class Usuario{
private $conn;
private $tabla="usuario";

public $id;
public $nombre;
public $fecha;

public function __construct($db){
    $this->conn=$db;
    $this->id="";
    $this->nombre="";
    $this->fecha="";
}
//this is my attempt of initializing the variables

// read products
function read(){
    // select all query
    $query = "SELECT (usrNombre) FROM usuario";

    // prepare query statement
    $stmt = $this->conn->prepare($query);

    // execute query
    $stmt->execute();

    return $stmt;
}
}

这是usuario / read.php文件,这是我正在运行的文件

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

include_once '../config/connect.php';
include_once '../objects/usuario.php';
//i include usuario.php 

$database = new Database();
//database class defined in config/connect.php
$db=$database->getConnection();

$Usuario=new Usuario($db);
//Here I initialize the user class from /objects/usuario.php
$stmt = $Usuario->read();
$num = $stmt->rowCount();

if($num>0){
    $listaUsrs=array();
    $listaUsrs["registros"]=array();

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        extract($row);

        $usuario_item=array(
        "usrId" => $id, 
        //"usrNombre"=> $nombre,
        //!empty($_POST['usrNombre']) ? $_POST['usrNombre '] : ''/*"usrNombre"*/ => $nombre,
        //"usrFecha" => $fecha,
    );

    array_push($listaUsrs["registros"], $usuario_item);
}

echo json_encode($listaUsrs);
}

else{
echo json_encode(
    array("message" => "No usrs found.")
);
}
?>

该方法是否不知道应该使用Usuario对象中定义的变量,还是我没有正确初始化它?

编辑: 我发现我的问题是{id}在$usuario_item=array("usrId" => $id, ...中是未定义的,因为我必须将其切换,$ id必须是$ usrId,而“ usrId”必须只是“ id”,$ usrId是指该列在我的数据库中,“ id”指的是Usuario类中的变量

3 个答案:

答案 0 :(得分:1)

关键字public使对象属性可供公众访问。它不会以某种方式神奇地使该属性成为全局名称空间的一部分。

$this->id指代属性id内{em> 类型Usuario的实例。这意味着您需要在该行中将其称为$Usuario->id

不过,常见的做法是为此类属性定义“获取器”并将其保留为私有,因此$Usuario->getId()。这使您的内部实现对外界隐藏,这是OOP的目的之一:

<?php
Class Usuario {
    // ...
    private $id;
    // ...

    public getId() { return $this->id; }
    // ...
}

答案 1 :(得分:0)

如果您尝试访问所创建的Usuario对象上的public id属性,请执行以下操作:

$Usuario->id;

答案 2 :(得分:0)

使用公共变量,可以使用(new MyClass)-> variableName。 对于静态公共变量,请使用MyClass :: variableName。 使用受保护的变量,将getter函数用作(new MyClass)-> getVariableName();。 阅读文档:http://php.net/manual/en/language.oop5.php