11-09-2011, 23:38
|
|
|
חבר מתאריך: 21.01.06
הודעות: 813
|
|
כן,ככה השתמשתי וגם ניסיתי במקום parant את שם מחלקת האב ואותה השגיאה..
לא נתתי את הקוד המלא כי זה די מסורבל וארוך...
אני חושב שהפיתרון הוא
קוד PHP:
Application::__set('name','value');
כי הקוד הזה לא מביא לי שגיאה..
אמנם יש לי כעת בעיה יותר גדולה,בשבילה אני אראה חלקים רלוונטים מהמערכת שכתבתי:
קוד PHP:
class index extends Application
{
public $data = array();
function __construct()
{
$this->loadModel('model_index');
if ($_POST['submit'] != null)
{
$this->loadCommand('user','login');
}
}
קוד PHP:
class Application
{
protected $command_data;
function loadCommand($comm,$action,$data=null)
{
$file = "command/command_".$comm.".php";
! file_exists($file) ? $this->loadError(400) : require_once($file);
$command = new $comm();
$this->command = $command;
! method_exists($command,$action) ? $this->loadError(400) : $command->{$action}($data);
//$this->__set('logged_in',true);
}
function __set ($name,$value)
{
$this->command_data[$name] = $value;
}
קוד PHP:
class user extends Application
{
function login ()
{
if ($_POST['username'] == 'ben' && $_POST['password'] == '123456')
{
Application::__set('logged_in',true);
}
אסביר בקצרה:
מחלקת index קוראת לloadCommand עם פרמטרים user,login שנמצא במחלקת Application,
מחלקת Application מריצה את פעולת login במחלקת user
עד לשלב הזה הכל תקין, פעולת login רצה והif מקבל true ומתבצע-עכשיו:
הפעולה הזאת אמורה להעביר את המשתנה $logged_in = true כחלק מהמערך $command_data
שנמצא בApplication, וזה לא קורה.
כבדיקה, הוספתי את השורה שנמצאת כהערה בloadCommand שבApplication -
$this->__set('logged_in',true);
ככה לעומת זאת,כן הועבר המשתנה
כלומר-בגדול הבעיה היא שהמשתנים שאני מוסיף דרך __set למערך command_data מתקבלים
רק אם אני יוצר אותם במחלקה loadCommand שבתוך Application ולא אם אני יוצר אותם דרך אינסטנס של מחלקה יורשת של Application, איך אפשר לתקן את זה?
תודה וסליחה על הבלאגן
_____________________________________
--- ! Area Close ! ---
|