include_once 'includes/conf.php'; // подключаем настройки (массив $conf)
class test {
PROTECTED $conf;
PUBLIC function print_conf()
{
$this->test = print_r($this->conf);
return $this->test;
}
}
$var = new test;
echo $var -> print_conf();
Что не так?
Спустя 13 часов, 30 минут, 54 секунды (20.12.2010 - 11:18) linker написал(а):
$this->test = print_r($this->conf, true);
Спустя 7 минут, 10 секунд (20.12.2010 - 11:25) ZSH написал(а):
class test {
PROTECTED $conf;
PUBLIC function print_conf($conf)
{
$this->conf = $conf
$this->test = print_r($this->conf);
return $this->test;
}
}
$var = new test;
echo $var -> print_conf($conf);
Спустя 3 минуты, 52 секунды (20.12.2010 - 11:29) linker написал(а):
Еще один с такой же ошибкой :)
$this->test = print_r($this->conf, true);
Спустя 5 минут, 4 секунды (20.12.2010 - 11:34) ZSH написал(а):
Цитата |
Еще один с такой же ошибкой |
Ага проморгал
$conf нужно еще както передать в класс, чтоб потом с ним проводить какието действия.
$conf нужно еще както передать в класс, чтоб потом с ним проводить какието действия.
Спустя 9 часов, 19 минут, 41 секунда (20.12.2010 - 20:54) ak167 написал(а):
Цитата (linker @ 20.12.2010 - 08:18) |
$this->test = print_r($this->conf, true); |
linker, всеравно не работает! Причем в моем варианте класса просто ничего не выводит, а в варианте ZSH'а выдает ошибку!!!
Parse error: syntax error, unexpected T_VARIABLE in /home/www/htdocs/site.ru/blog/index.php on line 11
Спустя 1 час, 12 минут, 3 секунды (20.12.2010 - 22:06) T1grOK написал(а):
Точка с запятой пропущена.
Спустя 40 минут, 6 секунд (20.12.2010 - 22:46) ak167 написал(а):
Спасибо, теперь работает! Однако, возникла другая проблема - как вывести на печать поределенное значение из массива?
Пробую так, но не получается:
Я правильно сделал return $this->conf['db_name']; ?
Пробую так, но не получается:
include_once 'includes/conf.php'; // настройки
class test2 {
PROTECTED $conf;
PUBLIC function print_conf()
{
$this->conf = $conf;
print_r($this->conf);
}
PUBLIC function db_name()
{
return $this->conf['db_name'];
}
}
$var2 = new test2;
echo $var2 -> db_name();
Я правильно сделал return $this->conf['db_name']; ?
Спустя 15 минут, 3 секунды (20.12.2010 - 23:01) ZSH написал(а):
а что получается?
Спустя 2 минуты, 51 секунда (20.12.2010 - 23:04) ZSH написал(а):
Цитата |
$conf нужно еще както передать в класс, чтоб потом с ним проводить какието действия. |
передается?
Спустя 4 минуты, 20 секунд (20.12.2010 - 23:08) T1grOK написал(а):
А где параметр метода делся и куда вызов метода print_conf() пропал???
Спустя 5 минут, 5 секунд (20.12.2010 - 23:13) ZSH написал(а):
покажи код класса и как он вызывается?
Спустя 9 минут, 37 секунд (20.12.2010 - 23:23) T1grOK написал(а):
include_once 'includes/conf.php'; // настройки
class test {
PROTECTED $conf;
PUBLIC function set_conf($conf)
{
$this->conf = $conf;
}
PUBLIC function db_name()
{
return $this->conf['db_name'];
}
}
$var = new test;
$var->set_conf($conf);
echo $var -> db_name();
Спустя 7 минут, 7 секунд (20.12.2010 - 23:30) ZSH написал(а):
а структура $conf?
Спустя 17 минут, 24 секунды (20.12.2010 - 23:47) ZSH написал(а):
вот кусок конфига
/**
* Файл класса конфигурации системы
* @package ZSH
* @subpackage ZSH Core
* @filesource
*/
/**
* Класс конфигурации системы
* создает один общий объект конфигурации, и достум к данным
* @package ZSH
* @subpackage ZSH Core
* @author ZSH
*/
class Conf
{
/**
* @var $configuration object объект масивов конфигурации системы
*/
private $configuration;
/**
* @varstatic $inst object объект данного класса (singleton)
*/
private static $inst;
/**
* Создает единственний экземпляр класса
* @return object объект данного класса
*/
public static function instanse()
{
if (empty(self::$inst))
self::$inst = new self;
return self::$inst;
}
/**
* Проверяет и возвращает данные конфигурации
* @param $sect string название секции даннх конфигурации
* @return mixed массив конф даных или FALSE если данных нет
*/
public function &get($sect)
{
if (isset($this->configuration->$sect))
return $this->configuration->$sect;
return false;
}
/**
* Доступ к конкретной конфиг записи
* например при вызове $obj->db('host'); ищет и возвращает $obj->configuration->db['host'];
* @param $metod string имя несуществующего метода название которого совпадает с названием секции конфига
* @param $arg array массив с переданними данными, ключ возвращаемого елемента конфига
* @return mixed данные конфига или FALSE при отсутствии таковой
*/
public function __call($method, $arg)
{
if (isset($this->configuration->$method))
{
$ret = $this->configuration->$method;
if (array_key_exists($arg[0], $ret))
return $ret[$arg[0]];
}
return false;
}
/**
* Подключение и инициациия конф файла
* проверяет есть ли указаный конф файл, подключает его и заносит данные в сборку кофигов $configuration под своим имененм
* @param string название файла конфигурации
* @return boolean результат удачного выполнения
*/
public function set($name)
{
if (! empty($name))
{
if (! file_exists(ROOT . CONF_DIR . DS . $name . EXT))
return false;
include ROOT . CONF_DIR . DS . $name . EXT;
$this->configuration->$name = $conf;
return true;
}
return false;
}
/**
* Конструктор
* подключает главный файл конфигурации системы и и инициирует данные
* @return void
*/
private function __construct()
{
$this->configuration = (object)null;
include ROOT . CONF_DIR . DS . CONF_FILE . EXT;
$this->configuration->core = $conf;
}
}
Спустя 10 часов, 10 минут, 55 секунд (21.12.2010 - 09:58) linker написал(а):
А с чего всему этому работать.
class test
{
protected $conf;
public function __construct()
{
$this->conf = Conf::instanse();
}
public function db_name()
{
return $this->conf['db_name'];
}
}
$var = new test();
Спустя 10 часов, 26 минут, 21 секунда (21.12.2010 - 20:25) ak167 написал(а):
linker, выдает ошибку:
Fatal error: Cannot redeclare class test in /home/www/htdocs/site.ru/ndex2.php
Fatal error: Cannot redeclare class test in /home/www/htdocs/site.ru/ndex2.php
Спустя 12 часов, 54 минуты, 22 секунды (22.12.2010 - 09:19) linker написал(а):
Ну назови его не test, а test1, о чем тебе PHP собственно и сообщает.
class test1
{
protected $conf;
public function __construct()
{
$this->conf = Conf::instanse();
}
public function db_name()
{
return $this->conf['db_name'];
}
}
$var = new test1();
Спустя 11 часов, 28 минут, 4 секунды (22.12.2010 - 20:47) ak167 написал(а):
Теперь выдает ошибку и ссылается на сроку $this->conf = Conf::instanse();
Текст ошибки: Fatal error: Class 'Conf' not found in /home/www/htdocs/site.ru/test.php on line 11
Текст ошибки: Fatal error: Class 'Conf' not found in /home/www/htdocs/site.ru/test.php on line 11
Спустя 12 часов, 45 минут, 26 секунд (23.12.2010 - 09:32) linker написал(а):
А ты подключил файлик с классом Conf? Ну ну буду же я писать тебе все целиком, я нарисовал тебе только класс, а все остальное сделай уж сам.
Спустя 7 часов, 47 минут, 30 секунд (23.12.2010 - 17:20) ak167 написал(а):
linker, да, подключал я его. Сам удивляюсь почему эта ошибка.
Спустя 42 минуты, 13 секунд (23.12.2010 - 18:02) linker написал(а):
Сделай проверку
include_once 'includes/conf.php';может у тебя conf.php не подключается.
class test1
{
protected $conf;
public function __construct()
{
$this->conf = Conf::instanse();
}
public function db_name()
{
return $this->conf['db_name'];
}
}
if (!class_exists('Conf')) die("Класс 'Conf' не определен.");
$var = new test1();
Спустя 3 часа, 29 минут, 26 секунд (23.12.2010 - 21:32) ak167 написал(а):
linker, вообще чудеса какие-то происходят!!! Пишет, что "Класс 'Conf' не определен." причем не только когда я через include подключаю, но и тогда, когда я массив $conf создаю напрямую в самом файле, в котором находится этот класс!!!
Спустя 15 минут, 18 секунд (23.12.2010 - 21:47) twin написал(а):
Да скока ж можно...
class Conf
{
public function instanse()
{
return array('db_name' => 'Я база');
}
}
class test
{
protected $conf;
public function __construct()
{
$this->conf = Conf::instanse();
}
public function db_name()
{
return $this->conf['db_name'];
}
}
$var = new test();
echo $var -> db_name();
Спустя 44 минуты, 49 секунд (23.12.2010 - 22:32) ak167 написал(а):
twin, этот вариант не подходит, мне нужно именно передать $conf в класс! Но всеравно спасибо)))
Спустя 11 часов, 18 минут, 57 секунд (24.12.2010 - 09:51) linker написал(а):
Ну вот же он передается
public function __construct()если тебе надо именно в класс, а не экземпляру, то
{
$this->conf = Conf::instanse();
}
class testТы уж определись с понятиями. Гы поправь в первом варианте
{
protected static $conf;
public static function setConf($Conf)
{
self::$conf = $Conf;
}
public function db_name()
{
return self::$conf->get('db_name');
}
}
test::setConf(Conf::instance());
public function db_name()
{
return $this->conf->get('db_name');
}