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

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.524
Стыдно, честно... Но чёт меня переклинило...

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
Стыдно, честно... Но чёт меня переклинило...

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... Работает...
Не забудь свойство определить в классе, сразу после
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;
 
    }
И область видимости тут уже задаётся этим Для просмотра ссылки Войди или Зарегистрируйся
P.S.: 24 февраля:D
 
Ты не верно понял задачу. Переменная $conf задана вне класса. И задать её внутри класса не представляется возможным.
Так что public $conf; отпадает. Вариант с global тоже отпадает, функций 100500, писать в каждую - убиться...

Про __construct знаю, но код писался с расчётом как на php 4, так и на php 5...
 
  • Заблокирован
  • #4
Ты тоже немного не понял смысла поста. Смысл в следующем - ты забыл(а может и не забыл, а просто не указал) свойство добавить. Раз уж нужна совместимость то через var $conf. А я просто решил чуток дополнить вот и всё:ah:
 
я бы всё таки обратился к глобальным переменным- если сложно прописать global $config; Но есть возможность изменить саму переменную используй глобальное хранилище
$GLOBALS["config"]
либо статическая переменная
configDb::$config

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