这是作业。我必须说说明书不是很清楚,但这就是我“破译”的内容。 我必须在不同的文件中创建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;
}
}
?>
我必须创建一个“ordinador”对象,其属性为$ model,$ preu,$ disc_dur,$ ram以便稍后显示。此信息来自HTML表单,该表单通过$ _POST将其发送到名为“ordinadors.php”的文件。由于我将拥有多个对象,因此我希望对象名称是变量变量。名称将是“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个“quadadors”的信息):
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”:我插入了quadador信息。按钮“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。我看了你发的链接,但我想我错过了这一点: - (
非常感谢你的帮助。
答案 0 :(得分:1)
首先,当你有一堆类似的对象而你需要存储它们时 - 使用数组。 所以,当你有一些会话值时:
$obj_id = $_SESSION['numOrdinadorsO'];
// instead of using variable variables use arrays:
$objects = array(); // array to store your objects
$ord_tmp = new Ordinador($model,$preu,$disc_dur,$ram);
// Now you have all your objects of type Ordinador in an array
$objects[$obj_id] = $ord_tmp;
您的主要问题是功能范围。当您致电consultarOrdinadorO
时,此功能在其自身范围内有效,因此它不了解任何外部变量。
有两种方法可以解决这个问题:
在当前函数中,在尝试访问$$name
之前,应将其声明为global
,以便该函数知道此变量是在其他位置定义的:
for ($i=0; $i<$valor; $i=$i+1)
{
$name="ordinador".$i;
// add the following line
global $$name;
// other code is the same
或者您可以将变量作为参数传递。但在你的情况下,你不知道你有多少物品。这就是我建议你使用数组的原因。在将所有Ordinators放到数组后,您可以将函数定义为:
function consultarOrdinadorO($ordinators)
{
// code skipped
for ($i=0; $i<$valor; $i=$i+1)
{
$cur_obj = $ordinators[$i];
if ($cur_obj->model == )
// code skipped
}
假设您先将所有对象收集到$objects
数组,函数调用将为consultarOrdinadorO($objects)
有关此处功能的更多信息:http://ca1.php.net/language.functions.php