Область видимости переменной

Тема в разделе "Как сделать...", создана пользователем Горбушка, 24 фев 2013.

  1. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.113
    Симпатии:
    2.130
    Стыдно, честно... Но чёт меня переклинило...

    PHP:
    <?php

    $conf 
    1;

    class 
    db 
        function 
    echo_conf () {
            echo 
    $conf;
        }
    }
    $db = new db;
    $db->echo_conf();

    ?>
    Код должен вывести 1.

    Собственно нужно чтобы переменная $conf была доступна внутри класса... При этом передавать её в каждую функцию - не вариант. Функций в классе много, надо чтобы все имели доступ к $conf. Так что $db->echo_conf ($conf) не предлагать.

    Решил проблему так:

    PHP:
        function db $conf ) {
            
            
    $this->conf $conf;
            
        }
    И заменил все $conf на $this->conf... Работает...
     
  2. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Не забудь свойство определить в классе, сразу после
    PHP:
    class db {
    public 
    $conf;
    Можно и сразу значение по-умолчанию присвоить
    PHP:
    class db {
    public 
    $conf 1;
    У тебя что php 4?
    Если пятый php, то там это называется конструктором и работает это так. Вместо одноимённой функции
    PHP:
        function db $conf ) {
     
            
    $this->conf $conf;
     
        }
    нужно использовать
    PHP:
        public function __construct$conf ) {
     
            
    $this->conf $conf;
     
        }
    И область видимости тут уже задаётся этим http://php.net/manual/ru/language.oop5.visibility.php
    P.S.: 24 февраля:D
     
  3. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.113
    Симпатии:
    2.130
    Ты не верно понял задачу. Переменная $conf задана вне класса. И задать её внутри класса не представляется возможным.
    Так что public $conf; отпадает. Вариант с global тоже отпадает, функций 100500, писать в каждую - убиться...

    Про __construct знаю, но код писался с расчётом как на php 4, так и на php 5...
     
  4. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Ты тоже немного не понял смысла поста. Смысл в следующем - ты забыл(а может и не забыл, а просто не указал) свойство добавить. Раз уж нужна совместимость то через var $conf. А я просто решил чуток дополнить вот и всё:ah:
     
    Горбушка нравится это.
  5. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    я бы всё таки обратился к глобальным переменным- если сложно прописать global $config; Но есть возможность изменить саму переменную используй глобальное хранилище
    $GLOBALS["config"]
    либо статическая переменная
    configDb::$config

    Если хочется сломать мозг - можно попробовать ввести примеси в код с помощью рефлекторов, евалов, пхп-компиляторов... И пусть скорость упадёт, требования к пхп возрастут, зато можно будет писать говнокод :)
     
    latteo и Горбушка нравится это.