我有一个php / oop的问题,因为在调用对象的方法时我得到了这个错误:"未捕获错误:在E:\ xampp中的数组中调用成员函数obtener_nombre() \ htdocs \ hackatonphp \ App \ RepositoryProducts .php:79"这是代码
实例化对象的类
<?php
class Producto {
private $nombre;
private $precio;
private $categoria;
//Constructor
public function __construct($nombre,$precio,$categoria){
$this -> nombre = $nombre;
$this -> precio = $precio;
$this -> categoria = $categoria;
}
//Setters
public function definir_nombre($nombre){
$this -> nombre = $nombre;
}
public function definir_precio($precio){
$this -> precio = $precio;
}
public function definir_categoria($categoria){
$this -> categoria = $categoria;
}
//Getters
public function obtener_nombre(){
return $this -> nombre;
}
public function obtener_precio(){
return $this -> precio;
}
public function obtener_categoria(){
return $this -> categoria;
}
}
显示productos的代码
public function obtener_productos($conexion,$categoria){
$productos = array();
if (isset($conexion)) {
try {
$sql = 'SELECT * FROM productos WHERE categoria = :categoria';
$sentencia = $conexion -> prepare($sql);
$sentencia -> bindParam(':categoria', $categoria);
$sentencia -> execute();
$productos = $sentencia -> fetchAll();
foreach ($productos as $producto) {
$productos[] = new Producto($producto['nombre'],$producto['precio'],$producto['categoria']);
}
} catch (PDOException $ex) {
print 'ERROR' . $ex->getMessage();
}
}
return $productos;
}
public static function mostrar_productos($categoria) {
Conexion::abrir_conexion();
$productos = self::obtener_productos(Conexion::obtener_conexion(),$categoria);
Conexion::cerrar_conexion();
if (count($productos)) {
foreach ($productos as $producto) {
self::escribir_producto($producto);
}
}
}
public static function escribir_producto($producto) {
if (!isset($producto)) {
return;
} else {
?>
<div class='columns'>
<!-- Inicio de la presentación -->
<div class='card h1-strong column is-one-third'>
<a href='#'>
<center>
<img class='img-index' src='Vendor/img/higiene.png'>
<h1 style='font-size: 3em;'><?php $producto -> obtener_nombre(); ?></h1>
<h3 style='font-size: 2em;'><?php $producto -> obtener_precio(); ?></h3>
</center>
<br>
</a>
</div>
<!-- Fin de la presentación -->
</div>
<?php
}
}`
实施:
<!-- Linea de opciones -->
<?php
RepositorioProductos::mostrar_productos("comida");
?>
答案 0 :(得分:0)
问题是obtener_productos()
正在为$prodctos
返回的数组和它返回的fetchAll()
数组使用变量Producto
。因此,它返回的数组元素包含数据库中的行(它们是关联数组)和对象。
使用不同的变量。
public function obtener_productos($conexion,$categoria){
$productos = array();
if (isset($conexion)) {
$productos = array();
try {
$sql = 'SELECT * FROM productos WHERE categoria = :categoria';
$sentencia = $conexion -> prepare($sql);
$sentencia -> bindParam(':categoria', $categoria);
$sentencia -> execute();
$results = $sentencia -> fetchAll();
foreach ($results as $producto) {
$productos[] = new Producto($producto['nombre'],$producto['precio'],$producto['categoria']);
}
} catch (PDOException $ex) {
print 'ERROR' . $ex->getMessage();
}
}
return $productos;
}