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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в теле класса объявить глобалную переменную? 
:(
    Опции темы
мухр
Дата 18.10.2006, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Необходимо использовать в классе перепенные, объявленные вне этого класса. Переменные в классе объявляются с помощью "public". Как бы в эту область можно выцепить внешнюю переменную?
PM WWW   Вверх
Mal Hack
Дата 18.10.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Сам понял что сказал?

Цитата(мухр @  18.10.2006,  07:18 Найти цитируемый пост)
Необходимо использовать в классе перепенные, объявленные вне этого класса.

global.

PM ICQ   Вверх
мухр
Дата 18.10.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



global - это внутри функции. Как сделать это внутри класса, чтобы они потом вызывались, как $this->var ? Где, собственно, var - изначально внешняя переменная.
По-сути, мне нужно на основе внешних переменных сформировать конфигурационный массив внутри класса.

Добавлено @ 08:20 
Ну вот пример из мануала:
Код

class SimpleClass
{
    // member declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}

Но в переменную $var необходимо подставить значение внешней переменной.

Это сообщение отредактировал(а) мухр - 18.10.2006, 08:15
PM WWW   Вверх
-=Ustas=-
Дата 18.10.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Код

class SimpleClass
{
    // member declaration
    public $var = 'a default value';
    // method declaration
    public function displayVar() {
        echo $this->var;
    }
    
    public function SimpleClass()
    {
        GLOBAL $simpleVar;
        $this->var =& $simpleVar;
    }
}

Тольк к чему такой изврат... это не правильно.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
мухр
Дата 18.10.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно это объявить как-нить не в теле функции, а в теле класса? Предполагается, что класс содержит несколько функций и пользуется неким общим массивом данных, объявленных внутри класса, среди которых могут быть заимствованные данные из внешних переменных.
Код

$cfg = Array();
$cfg['shablon_folder'] = 'shablon/';
// ... и многое другое
class SimpleClass    
{    
    public $var = $cfg['shablon_folder'].'form/';    
}

Вот такая запись почему-то не срабатывает. Выдаётся какая-то синтаксическая ошибка. Никаких слияний строк и арифметических действий.
PM WWW   Вверх
smartov
Дата 18.10.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

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



мухр, перечитал доку, похоже что нельзя провозгласить глобальную переменную в теле класса - только в функциях класса.
PM MAIL   Вверх
-=Ustas=-
Дата 18.10.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



мухр, зачем делать привязку на глобальную видимость?! Сама реализация класса не должна зависеть от внешних переменных, это плохой подход. Лучше уж так:
Код

$cfg = Array();
$cfg['shablon_folder'] = 'shablon/';
// ... и многое другое
class SimpleClass    
{    
    public $var = $cfg['shablon_folder'].'form/';    
}

$Obj = new ....
$Obj->var =& $cfg;



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 18.10.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Через конструктор. Зачем люди придумали...
PM ICQ   Вверх
-=Ustas=-
Дата 19.10.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Цитата(Mal Hack @  18.10.2006,  16:05 Найти цитируемый пост)
Через конструктор. Зачем люди придумали... 

Ну тогда в конструкторе все равно придется глобал делать.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
<Spawn>
Дата 23.10.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



-=Ustas=-, Зачем это?

Код

class SomeClass
{
  private $someVariable;

  public function __construct($someVariable)
  {
    $this->someVariable = $someVariable;
  }
}

$externalVariable = 'Сейчас меня передадут в экземпляр класса...';

$someClassInstance = new SomeClass($externalVariable);



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Mal Hack
Дата 23.10.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Цитата(-=Ustas=- @  19.10.2006,  10:20 Найти цитируемый пост)
Ну тогда в конструкторе все равно придется глобал делать. 

Еще вариант, это ссылку на объект передать, в качестве параметрп. Сам так поступаю.
PM ICQ   Вверх
Eugene_Bond
Дата 24.10.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если речь идет о кофигурационных переменных -- для этого существет http://php.net/define
PM MAIL   Вверх
-=Ustas=-
Дата 24.10.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



<Spawn>, да, не подумал сразу.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
мухр
Дата 25.10.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Странная тут фигня происходит. На локалке-Денвере вроде нормально всё, а на сервере такая ерунда выдаётся, когда использую "public" для переменной:
Цитата

Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /usr/home/smolosid/domains/bakanov.info/public_html/ivep/classes/form.php on line 74

Фрагмент на 74 строке следующий:
Код

public $cfg = Array(
'shablon_prefix' => 'form/',
'form_name' => 'form',
'full_block_types' => Array('title', 'comment')
);

Что бы это могло быть, и как лучше исправить? smile 
PM WWW   Вверх
мухр
Дата 25.10.2006, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Буду пользоваться следующим изворотом: smile 
Код

// Конфигурации
function cfg($key = '') {
global $cfg;
$cfg_this = Array(
'shablon_prefix' => 'form/',
'form_name' => 'form',
'full_block_types' => Array('title', 'comment')
);
if (isset($cfg_this[$key])) return $cfg_this[$key]; else return false;
}

Вызывается следующим образом:
Код

// Заголовок
function title ($params = Array()) {
// ...
$return_str = get_shablon($this->cfg('shablon_prefix').'simple_block_title', $search, $replace);
// ...
return $return_str;
}

В том числе и наследование внешних данных здесь также допустимо.

Это сообщение отредактировал(а) -=Ustas=- - 25.10.2006, 09:07
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Extensions | Следующая тема »


 




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


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

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