[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как импортировать массив в класс
ak167
Нужно импортировать массив $conf в класс "test". После этого решил проверить какие значения в нем содержаться. Оказалось, что единственное значение "1" вместо логина и пароля доступа к БД,

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 написал(а):

Цитата
Еще один с такой же ошибкой
Ага проморгал smile.gif

$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 написал(а):
Спасибо, теперь работает! Однако, возникла другая проблема - как вывести на печать поределенное значение из массива?
Пробую так, но не получается:


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

Спустя 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

Спустя 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';

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();
может у тебя conf.php не подключается.

Спустя 3 часа, 29 минут, 26 секунд (23.12.2010 - 21:32) ak167 написал(а):
linker, вообще чудеса какие-то происходят!!! smile.gif Пишет, что "Класс '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');
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.