Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы и переменные из внешних файлов, Есть необходимость подгрузки переменных 
V
    Опции темы
ArNic
  Дата 29.9.2008, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Дано:
Есть файл jason.php с содержанием
Код

class Jason{
    public $end;
    var $MySQL;
    var $conn;
    function __construct(){
        $this->end = "";
        require_once('base.php'); //Основные функции объединенные в классы
        require_once('pars.php'); //Основные параметры (неизменяемые) - ну вы понимаете, типа данные для подключения к базе или префиксы. В данном случае $Prefix = 0001_
        $MySQL = new MySQL(); //Класс из файла base.php
        $conn = $MySQL->connect();
    }
    function __destruct(){
        echo $this->end;
        $MySQL->close($conn);
    }
    function Show($t){
        $this->end .= "SELECT * FROM `".$Prefix."Jason` WHERE `Name`='$t'\n"; //Вот сюда и не забрасывает переменную $Prefix :(
       }

Нужно:
Чтобы переменная из файла pars.php - перекочевала в jason.php
и чтобы при выполнении кода 
Код

$Jason = new Jason();
$Jason->Show('Register');

отображалось:
Код

SELECT * FROM `0001_Jason` WHERE `Name`='Register'


Пояснения:
Обращаюсь именно к профи, т.к. сидел за мануалами несколько суток, разобраться не смог. А значит сдался! Ситуация сложновата, т.к. нельзя по другому выполнять загрузку этих параметров, а только из pars.php
PM MAIL ICQ   Вверх
Sanchezzz
Дата 29.9.2008, 05:50 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 2
Всего: 60



переменная Prefix выводятся принтом в конструкторе?

попробуй так
Код

 function Show($t){
 global $Prefix;
        $this->end .= "SELECT * FROM `".$Prefix ...


Это сообщение отредактировал(а) Sanchezzz - 29.9.2008, 05:55


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ArNic
Дата 29.9.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Не получается - попробовал как ты мне сказал:
1) Print - в конструкторе вывел значение переменной
2) объявление глобальности для $Prefix - не дало результатов
Код

class Jason{
    public $end;
    var $MySQL;
    var $conn;
    function __construct(){
        $this->end = "";
        require_once('base.php'); //Основные функции объединенные в классы
        require_once('pars.php'); //Основные параметры (неизменяемые) - ну вы понимаете, типа данные для подключения к базе или префиксы. В данном случае $Prefix = 0001_
        $MySQL = new MySQL(); //Класс из файла base.php
        $conn = $MySQL->connect();
    }
    function __destruct(){
        echo $this->end;
        $MySQL->close($conn);
        print $Prefix."\n";
    }
    function Show($t){
        global $Prefix;
        $this->end .= "SELECT * FROM `".$Prefix."Jason` WHERE `Name`='$t'\n"; //Вот сюда и не забрасывает переменную $Prefix :(
       }

Выходит вот что
Код

0001_
SELECT * FROM `Jason` WHERE `Name`='Register'



Из этого делаю вывод - переменная импортируется в класс, но вот что плохо, только на момент выполнения конструктора, после конструктора переменная удаляется.
Жду предложений.

Это сообщение отредактировал(а) ArNic - 29.9.2008, 10:24
PM MAIL ICQ   Вверх
krundetz
Дата 29.9.2008, 12:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Ну во первых начнем с того что то как вы делаете концептуально не верно, если вы используете классы.

Во вторых что вам мешает в классе сделать дополнительную переменную которая и будет подставляться в запрос. А переменную назначать через соответствующей метод дибо через конструктор.

Если же необхдим доступ к этой переменной так как вы хотите то сделайте ее статичесмкой переменной класса. Либо используйте класс синглитон.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
teroni
Дата 29.9.2008, 12:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 1
Всего: 22



А чего нельзя просто константами сделать Ваши переменные? Они доступны из любой области видимости.
PM MAIL   Вверх
ArNic
Дата 29.9.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Сейчас попробую
PM MAIL ICQ   Вверх
krundetz
Дата 29.9.2008, 13:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 1
Всего: 69



Цитата(teroni @ 29.9.2008,  12:13)
А чего нельзя просто константами сделать Ваши переменные? Они доступны из любой области видимости.

Конечно же можно. Но тогда можно и без классов обойтись. Если уж используются классы то следует использовать концепцию ООП. А в ней константа это статический член класса. О чем собственно я выше и говорил.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
ArNic
Дата 29.9.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Цитата(krundetz @  29.9.2008,  12:13 Найти цитируемый пост)
Во вторых что вам мешает в классе сделать дополнительную переменную которая и будет подставляться в запрос. А переменную назначать через соответствующей метод дибо через конструктор.

Пример можно?
PM MAIL ICQ   Вверх
sTa1kEr
Дата 30.9.2008, 12:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(krundetz @  29.9.2008,  14:27 Найти цитируемый пост)
Если уж используются классы то следует использовать концепцию ООП. А в ней константа это статический член класса.

Возможно вы все-таки имели ввиду константы класса, а не статические свойства? Т.к. это совершенно разные вещи, статическое свойство к константам не имеет никакого отношения, оно противоречит логике констант - глобальная видимость и неизменяемость. 

ArNic, у вас в классе очень много логических ошибок, начиная от отсутствия указателей $this и заканчивая отсутствием какого-либо смысла в самом классе. По этому советую либо тщательно пересмотреть их архитектуру, либо отказаться от них вовсе. И, конечно же, для неизменяемых элементарных значений нужно использовать константы.
PM MAIL   Вверх
ArNic
Дата 30.9.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



Всем спасибо, если объявить 
Код
var $Prefix
 в начале класса, а потом в конструкторе сообщить 
Код
$this->Prefix = $Prefix;
 - будет всме нормально.
Благодарю за советы, я ими всеми воспользовался(а некоторыми еще воспользуюсь) (в нормальном смысле слова smile )  - постараюсь пересмотреть метод написания кода.
Да забыл сказать дале по коду все $Prefix - менял на $this->Prefix

Добавлено @ 22:25
Сразу вопрос sTa1kEr, а применение переменных типа $Prermen  внутри методов корректно? Или даже в этом случае нужно использовать $this->Peremen?

Это сообщение отредактировал(а) ArNic - 30.9.2008, 22:26
PM MAIL ICQ   Вверх
sTa1kEr
Дата 1.10.2008, 09:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(ArNic @  30.9.2008,  23:19 Найти цитируемый пост)
а применение переменных типа $Prermen  внутри методов корректно? Или даже в этом случае нужно использовать $this->Peremen?

Использование локальных переменных внутри метода? Конечно-же корректно, если эти переменные были должным образом инициализированы, а не так:
Цитата(ArNic @  29.9.2008,  03:08 Найти цитируемый пост)

Код

    function __destruct(){
        echo $this->end;
        $MySQL->close($conn); // Здесь будет сгенерированна ошибка, т.к. переменной $conn не существует, существует только свойство $this->conn
    }

PM MAIL   Вверх
ArNic
Дата 1.10.2008, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.1.2007

Репутация: нет
Всего: нет



ок, понял
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.