За последние 24 часа нас посетили 15587 программистов и 1550 роботов. Сейчас ищут 872 программиста ...

помогите разобраться в ООП

Тема в разделе "PHP для новичков", создана пользователем Alex_@, 17 сен 2010.

  1. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    предположим есть некий класс А

    PHP:
    1. <?php
    2. class A{
    3. public $var_1, $var_2,$var_3,$var_4;
    4.  
    5. public function __construct(){
    6.     $this->var_1 = $var_1;
    7.     $this->var_2 = $var_3;
    8.     $this->var_3 = $var_3;
    9.     $this->var_4 = $var_4;
    10. }
    11. public function MainFunc(){
    12.            $this->var_1 = new Class2();//другой класс
    13.            $this->var_2 = new Class3();//другой класс
    14.  
    15. }
    16. }
    17. ?>
    листинг Class2()

    PHP:
    1. <?php
    2. class Class3{
    3. public $var_5, $var_6,$var_7,$var_8;
    4.  
    5. public function __constructor(){
    6.     $this->var_5 = $var_5;
    7.     $this->var_6 = $var_6;
    8.     $this->var_7 = $var_7;
    9.     $this->var_8 = $var_8;
    10. }
    11. public function Class3_MainFunc(){
    12.            $this->var_5 = $this->$var_1->Func_new();
    13. //здесь у меня выдаёт ошибку,хотя  данная функция существует в классе Class2
    14. }
    15. ?>
    Помогите разобраться!!!!
    как получить доступ в классе Class3 к переменной из Class2
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    объявите переменную(свойство) как public
     
  3. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Не прокатывает!!!!!
    она у меня была сначала как private потом я её Public сделал но осталось всё тоже самое!
    может дело в чём то другом????
     
  4. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    PHP:
    1. <? $this->vart_5 = $this->var_1->Func_new();
    2.  
     
  5. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Извиняюсь я описался у меня $this->vart_5 = $this->var_1->Func_new(); Без $;

    мне выдаёт ошибку что не доступа к функции Func_new()!
     
  6. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    $this->var_1 = new Class2(); - данный клас у меня представляет собой класс для работы с БД
    Func_new() - это я так написал на самом деле там вызывается ряд функция на перезапиьс запроса к БД и выполнение самого запроса, но эпри этом выдаётся ошибка!
    класс А - предназначен для вывода страницы!
    это вкратце что я хочу сделать!
     
  7. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    ты разберись для начала.
    пишешь

    листинг Class2()

    а в след идущем коде

    Код (Text):
    1. class Class3{
    как изволите понимать сие?
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    На такой чудовищный уровень абстракции описания не способен даже мой затраханый мозг.
    Проще, проще надо описывать. И практичней. Чтобы было ясно. А-то слов много, одно на другом.
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    __construction
     
  10. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Каждый клас выполняет свои функции, они подключаются динамически!
    Class2() - - это клас для работы с БД
    Class3() -- для обработки и анализа переданного пути (url) и т.д.
    толко вот в Class3() - я не могу сделать запрос к БД для выборки из БД на основании url необходимые данные для построения содержимого!
    php мне ошибку выдаёт!
    так же я не могу работать с класом написанного для работы с пользователем!
    а classA() - это основной класс в файле index.php!
     
  11. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    ПРошу прощения за описки я представленный код на скорую руку набирал!
     
  12. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Помогите! пожалуйста!!!
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    должно работать. что у вас не работает конкретно?
     
  14. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    этот код у меня стоит в файле index.php

    PHP:
    1. require_once './lib/class.inc';
    2.  
    3. $pages = new load();
    4. $pages->load_BootStart($setting);
    в упрощённом виде код файла class.inc

    PHP:
    1. <?php
    2.  
    3. // $Id: load.php,v 1.02 2010/10/09 12:05:00 $
    4. require_once './settings/settings.php'; // настройки для подключения к БД
    5. require_once './lib/mysql.inc';//клас блин работы с БД
    6. require_once './lib/exceptions.inc';//класс исключений
    7. //необходимые константы не буду объяснять зачем они
    8. define("NAME_ACTION", "ect");
    9. define("ACTION_DEFAULT", "list");
    10. define("ACTION_PROTSES", "sawe");
    11. define("TIME_COOCIES", "3600");
    12. define("TIME_FORMAT_INT", "int");
    13. define("TIME_FORMAT_DATATIME", "time");
    14.  
    15.  
    16.  
    17. class load{
    18.     public $db;
    19.     private $file;
    20.     private $module;
    21.     private $path;
    22.     private $user;
    23.     private $block;    
    24.     private $content;
    25.    
    26.     public function __constuct(){
    27.         $this->db = $db;
    28.         $this->file = $file;
    29.         $this->module = $module;
    30.         $this->path = $path;
    31.         $this->user = $user;       
    32.         $this->block = $block;     
    33.         $this->content = $content;
    34.     }        
    35.     public function __set($name,$value){
    36.         $this->name = $value;
    37.     }
    38.    
    39.     public function load_BootStart($setting){
    40.         $this->db = new dbBases($setting);
    41.         $this->module = $this->loading_BootModule();
    42.         foreach($this->module as $key => $value){
    43.         $this->file[] = './modules/'.$value['MO_NAME'];
    44.         }
    45.         $this->load_BootFile();// загрузка необходимых файлов
    46.         $this->path = new Mpath();//пути
    47.         $this->path->Mpath_Sinonims();//запрос к пути у меня здесь выводит ошибку
    48.         $this->user = new Muser();
    49.         $this->user->Muser_DetectUser();//запрос к пути у меня здесь выводит ошибку
    50.     }  
    51.     public function load_GetVariabl($var){
    52.         $this->db->str = "SELECT * FROM {variabl} WHERE {variabl}.`VA_NAME` = '%s';$var";
    53.         $result = $this->db->dbBases_FetchArray($this->db->dbBases_Query($this->db->dbBases_RewriteQuery()));
    54.         return $result[0]['VA_VALUE'];
    55.     }
    56.     public function load_GetSession(){
    57.         return session_id();
    58.     }
    59.     public function load_GetIPadress(){
    60.         return $_SERVER['REMOTE_ADDR'];
    61.     }
    62.     public function load_GetTime($format){
    63.         switch ($format){
    64.           case TIME_FORMAT_DATATIME:
    65.                 $result = date("Y-m-d H:i:s");
    66.                 break;
    67.           case TIME_FORMAT_INT:
    68.                 $result = time();
    69.                 break;
    70.         }
    71.         return $result;
    72.     }
    73.     public function load_BootFile(){
    74.         foreach($this->file as $key => $value){
    75.                 try{
    76.                     if (file_exists("$value")){
    77.                         include_once("$value");
    78.                     }
    79.                     else {
    80.                         throw new FileException('file_none');
    81.                     }
    82.                 }  
    83.                 catch(Exception $e){
    84.                     return $this->error = $e->getMsg();
    85.                 }      
    86.             }
    87.     }
    88.     public function load_BootModule(){// хотя в этой функции всё работает тоесть обращение к бд
    89.         $this->db->str = "SELECT * FROM {module} ORDER BY {module}.`MO_COUNT` ASC";
    90.         return $this->db->dbBases_FetchArray($this->db->dbBases_Query($this->db->dbBases_RewriteQuery()));
    91.     }
    92. }
    93.  
    94. ?>
    приведу листинг функции $this->path->Mpath_Sinonims(); которая находиться в динамически подключаемом файле
    в каталоге /mod/

    PHP:
    1.  
    2. public function Mpath_Sinonims(){
    3.         $count_path = count($this->path['get'])-1;
    4.         $seach_path = $this->path['get'][$count_path];
    5.         $this->db->str = "SELECT * FROM {synonyms},{menu} WHERE {synonyms}.`SI_SINONIM` = '%s' AND {menu}.`ME_COUNT` = {synonyms}.`SI_ME_COUNT`;$seach_path";
    6.           if($this->db->dbBases_FetchArray($this->db->dbBases_Query($this->db->dbBases_RewriteQuery())) != NULL){
    7.                 return $this->db->dbBases_FetchArray($this->db->dbBases_Query($this->db->dbBases_RewriteQuery()));
    8.           }
    9.           else return false;
    10.       }
    в данной функции Я не могу обратится к подключению к базе данных[/php]
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    во-первых не load(), а loading()

    во-вторых, фигли в функцию ты не чего не передаешь, но там к чему-то обращаешься. область видимости учитываешь?
     
  16. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    O_O
     
  17. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    да я просто изменял названия функций!

    ты думаеш что

    PHP:
    1. $this->path->Mpath_Sinonims();//запрос к пути у меня здесь выводит ошибку
    надо передавать


    PHP:
    1. $this->db
    ???????????????
     
  18. Superk

    Superk Активный пользователь

    С нами с:
    5 фев 2010
    Сообщения:
    32
    Симпатии:
    0
    $this->db внутри объекта Mpath относительно класса load, означает $this->path->db
    обычно чтобы обеспечить доступ к одному классу, без того, чтобы плодить многочисленные его экземпляры используетсяпаттерн Singleton
    либо:
    2.Передавать db напрямую, через конструктор
    $this->path = new Mpath($this->db);

    class Mpath
    {
    __costruct($db){
    $this->db = $db;
    }

    }
    3.Передавать db через глобальную переменную
    4.Создавать экземпляр db в конструкторе Mpath