[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не могу получить значение свойства
Страницы: 1, 2
McLotos
Добрый вечер.
Имеется скрипт h.php
он подключает в себя несколько классов и создаёт объекты.
Он же подключает в себя скрипт m.php
Как в скрипте m.php получить значение свойства объекта?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
inpost
McLotos
А в чём косяк? Показал бы код... что гадать. Может ты накосячил с областью видимости, тогда подскажу тебе использовать какой-нибудь singleton, а если не напутал, то так же само как и в первом классе)

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
McLotos
... код тут абсолютно ничего не даст. =(
index.php
require PHP_HEADER;
require PHP_FOOTER;

header.php
require PHP_FUNCTIONS;
require CLASS_ROUTER;
require CLASS_BASE;
require CLASS_TEMPLATE;
require CLASS_MODULES;
require CLASS_USER;
$db = new dBase;
$route = new Router;
$tpl = new Template;
$modules = new Modules;
$user = new User;
$modules -> requireModules($modules_list);

один из модулей это Menu.php
в нём пытаюсь сделать запрос к БД, но скрипт ругается потому-что не видит переменную $db
пока обошел это так
header.php
global $db,$tpl,$user;

и в menu.php переменная $db стала видна через $GLOBALS['db']
global это зло? =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Игорь_Vasinsky
Цитата
global это зло? =)

угу. http://freehabr.ru/qa/222.html

твой пример типо этого?



class Test{
public function testMethod(){
global $var;
return $var;
}
}

$var = 'variable';
$obj = new Test;
echo $obj->testMethod();


а чё мешает сделать так?

class Test{
public $var;
public function testMethod(){
return $this->var;
}


}

$var = 'variable';
$obj = new Test;
$obj->var = $var;
echo $obj->testMethod();



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
inpost
McLotos
Для db, user отлично подойдет Синглтон или статичный класс. Правда эту строчку: global $db,$tpl,$user; придется написать так:
$db = new dBase;
$user = new User;

А если статичный метод, то $db = dBase::$db; $user = User::$user;

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
McLotos
Цитата (Игорь_Vasinsky @ 12.08.2014 - 13:48)

а чё мешает сделать так?

Это не решит проблему
Цитата (inpost @ 12.08.2014 - 14:13)
Правда эту строчку: global $db,$tpl,$user; придется написать так:

не совсем понял.
у меня и так это написано.
global $db,$user,$tpl;
$db = new dBase;
$user = new User;
$tpl = new Template;

offtopic for Игорь_Vasinsky
где пропадал целых 3 месяца? =)


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
McLotos
В общем global тоже не сработало. как можно ещё попробовать. или где что изменить?
Index.php
|
|
_header.php
| |_dbase - класс
| |_template - класс
| |_menu - модуль
|
|
_footer.php


Index по сути ничего не делает
header подключает скрипты классов и подключает скрипты модулей, он же инициализирует классы
footer выводит результаты работы классов


Не могу сделать чтобы menu мог работать с объектами dbase и template
Например footer видит все эти объекты и может к ним обращаться, а вот из меню я никак не могу подключиться к БД, ругается Undefined variable: db

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
inpost
McLotos
через GLOBALS видно всегда.
global $db;
$db->query... // ругается так? Разве? Может быть ты $db создаёшь ВНУТРИ другого класса, а не в корне, как показал код выше...

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
McLotos
в header.php добавляю строку
global $db,$tpl;
в menu.php обращаюсь
$GLOBALS['db'] и тогда работает, но вот почему-то
$GLOBALS['tpl'] не хочет так работать, не ругается но и ничего не выводит, допустим
echo $tpl ->html в footer говорит что это объект
а echo $GLOBALS['tpl'] в menu ничего вообще не говорит =(

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
inpost
в header.php добавляю строку
global $db,$tpl;
.........
global $db ты должен писать внутри функции (метода), чтобы достать переменную.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
McLotos
Цитата (inpost @ 12.08.2014 - 21:11)
внутри функции (метода)

нету никакой функции или метода. есть отдельный файл menu.php
в нём мне нужно получить доступ к объекту db и объекту tpl
почему в footer получается работать с объектами а в menu не получается?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
inpost
Что-то ты темнишь. include лишь копи-пастит код, область видимости единая.

Создай чистых 3 файла, одним подключи 2 других. В одном создай переменную, в другом попробуй вывести. И увидишь, что результат будет отличаться от твоего

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
McLotos
Цитата (inpost @ 12.08.2014 - 23:43)
Создай чистых 3 файла, одним подключи 2 других.

я так и думал.
f1.php
require f2.php

f2.php
require db.class.php
require f3.php

f3 не сможет работать с db

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
SlavaFr
@McLotos
1) Уже заявили, о том, что вызов Базы данных или по крайней мере конекции с ней должен быть упакована в singelton или в патарне Registry.
Если не понятно по чему или как, то задавай вопросы.

2) Используй автолодад и называй файлы соответственно именам классов, чтоб избавится от бесчисленных и вредных include, require, include_once, require_once вызовов, которые портят структуру классов. Опять же, если не понятно по чему и как, то спрашивай.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
inpost
McLotos
Я уверен на 100%, что если я упакую в таком порядке, то всё будет работать. Ты запихиваешь переменные внутрь функций или методов и блокируешь от видимости.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

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