【发布时间】:2015-03-14 19:42:18
【问题描述】:
这是作业。我必须说说明不是很清楚,但这就是我“破译”的内容。 我必须在不同的文件中创建 1 个具有 1 个“子类”的类。父类是:
<?php
class Objecte
{
var $model;
private $preu;
public function __construct($model,$preu)
{
$this->model=$model;
$this->preu=$preu;
}
}
?>
“子类”是:
<?php
include('classe_objecte.php');
class Ordinador extends Objecte
{
private $disc_dur;
private $ram;
public function Ordinador($model,$preu,$disc_dur,$ram)
{
parent::__construct($model,$preu);
$this->disc_dur=$disc_dur;
$this->ram=$ram;
}
}
?>
我必须创建一个具有 $model,$preu,$disc_dur,$ram 属性的“ordinador”对象,以便稍后显示。此信息来自一个 HTML 表单,该表单通过 $_POST 将其发送到名为“ordinadors.php”的文件中。由于我将拥有超过 1 个对象,因此我希望对象名称是一个变量。该名称将是单词“ordinador”和一个名为“numOrdinadorsO”的会话变量中提供的数字。这是“ordinadors.php”代码的一部分:
include_once('classe_ordinador.php');
/*some other code here*/
$name="ordinador".$_SESSION['numOrdinadorsO'];
$$name=new Ordinador($model,$preu,$disc_dur,$ram);
如果我 var_dump($$name),我会得到这个:
object(Ordinador)#1 (4) { ["disc_dur":"Ordinador":private]=> string(3) "100" ["ram":"Ordinador":private]=> string(1) "8" ["model"]=> string(7) "modelo1" ["preu":"Objecte":private]=> string(3) "200" }
创建对象后,我必须搜索特定的“模型”并返回与该模型相关的其他属性(preu、ram 等)。问题开始了。这是代码:
function consultarOrdinadorO()
{
$model_buscat=$_POST['ordinador_busqueda'];
$valor=$_SESSION['numOrdinadorsO'];
$contador=0;
$trobat=false;
do
{
for ($i=0; $i<$valor; $i=$i+1)
{
$name="ordinador".$i;
if ($$name->model==$model_buscat) <-- this is line 91
{
echo "Model $model_buscat trobat.";
$trobat=true;
break;
} else {
$contador+=1;
}
}
}
while ($trobat==false && $contador<$valor);
if ($trobat==false)
{
echo "Model $model_buscat no trobat.";
}
}
我收到此错误(我之前插入了 3 个“ordinadors”的信息):
Notice: Undefined variable: ordinador0 in C:\Users\Quenya\IOC\2014-2015\S2\M09 PHP\EAC1\Ejercicios\Exercici2\ordinadors.php on line 91
Notice: Trying to get property of non-object in C:\Users\Quenya\IOC\2014-2015\S2\M09 PHP\EAC1\Ejercicios\Exercici2\ordinadors.php on line 91
Notice: Undefined variable: ordinador1 in C:\Users\Quenya\IOC\2014-2015\S2\M09 PHP\EAC1\Ejercicios\Exercici2\ordinadors.php on line 91
Notice: Trying to get property of non-object in C:\Users\Quenya\IOC\2014-2015\S2\M09 PHP\EAC1\Ejercicios\Exercici2\ordinadors.php on line 91
Notice: Undefined variable: ordinador2 in C:\Users\Quenya\IOC\2014-2015\S2\M09 PHP\EAC1\Ejercicios\Exercici2\ordinadors.php on line 91
Notice: Trying to get property of non-object in C:\Users\Quenya\IOC\2014-2015\S2\M09 PHP\EAC1\Ejercicios\Exercici2\ordinadors.php on line 91
有什么帮助吗?我在论坛中寻找过类似的其他问题,但我没有找到任何问题。我想我可能不太了解对象和类的工作原理,但是老师提供的信息......非常有限。
非常感谢!
更新 1: 谢谢 u_mulder,我想我现在看到了一些曙光。但是...我一直遇到一些问题:-(。
我之前错过的其他信息:我有一个带有 2 个按钮的 HTML 表单。 - 按钮“inserir”:我插入 ordinador 信息。按钮“consultar”:我在文本框中插入一个模型,然后单击模型搜索模型。
ordinadors.php 中的代码指定当我单击一个按钮或另一个按钮时调用哪个函数:
session_start();
include_once('classe_ordinador.php');
$objetos=arrray();
//这里还有一些代码
if (isset($_POST['inserir']))
{
inserirOrdinador();
inserirOrdinadorS();
inserirOrdinadorO();
var_dump($objetos);
} elseif (isset($_GET['consultar'])=='consultar')
{
consultarOrdinador();
} elseif (isset($_POST['consultar_ordinador']))
{
if (empty($_POST['ordinador_busqueda']))
{
echo "Model no introduit.";
}else
{
var_dump($objetos);
/*
consultarOrdinadorS();
consultarOrdinadorO($objetos);
*/
}
}
inserirOrdinadorO 现在看起来像这样:
function inserirOrdinadorO()
{
$_SESSION['ordinadorsO']=array('model_ordinadors'=>$_POST['model_ordinadors'],'preu_ordinadors'=>$_POST['preu_ordinadors'],'tamany'=>$_POST['tamany'],'ram'=>$_POST['ram']);
$model=$_SESSION['ordinadorsO']['model_ordinadors'];
$preu=$_SESSION['ordinadorsO']['preu_ordinadors'];
$disc_dur=$_SESSION['ordinadorsO']['tamany'];
$ram=$_SESSION['ordinadorsO']['ram'];
global $objetos;
$obj_id = $_SESSION['numOrdinadorsO'];
$ord_tmp = new Ordinador($model,$preu,$disc_dur,$ram);
$objetos[$obj_id] = $ord_tmp;
$_SESSION['numOrdinadorsO']+=1;
echo "Objecte Ordinador inserit.</br>";
}
所以这里的 var_dump($objetos) 向我展示了我在 inserirOrdinadorO 中添加的值:
if (isset($_POST['inserir']))
{
inserirOrdinador();
inserirOrdinadorS();
inserirOrdinadorO();
var_dump($objetos);
但是这里的那个
} elseif (isset($_POST['consultar_ordinador']))
{
if (empty($_POST['ordinador_busqueda']))
{
echo "Model no introduit.";
}else
{
var_dump($objetos);
返回这个:
array(0) { }
我猜是因为它在这里读取了$objetos,当然它是空的:
session_start();
include_once('classe_ordinador.php');
$objetos=array();
但是...我怎样才能使它也可以从那里阅读呢?
对不起,我只是从 php 开始。我阅读了您发送的链接,但我认为我在这里错过了重点:-(
非常感谢您的帮助。
【问题讨论】:
-
函数
consultarOrdinadorO不知道$$name,因为后者在外部范围内。而不是将对象存储为$$name,而是将它们放在一个数组中。 -
@ u_mulder 对不起,你说“而不是将对象存储为 $$name 而是将它们放在一个数组中。”是什么意思?
-
可能不是最好的方法,因为我需要保留信息,因为我导航到其他页面,所以我将数组与对象一起存储在 $_SESSION 数组中。
标签: php class object properties