Class.sql.php
Class.main.php
Class.users.php
Класс main наследник sql(class main extends sql),класс users вызывается из класса main,так вот вопрос в том как сделать что бы функции классов main и sql передались users?
Наследование users –main незя –вызывается класс main а он уже самостоятельно подключает класс users
Обьявление этих классов в users не желательно тогда метод __construct в них будет уже во второй раз коннектится к базе парсить шаблоны извлекать категории и конфигурацию движка
Спустя 1 час, 13 минут, 45 секунд (22.05.2007 - 18:42) vasa_c написал(а):
Что символизируют эти классы? Почему main наследуется от sql? Что значит "класс вызывается из класса"? Что значит "функции передались"? Почему нельзя сделать проверку есть уже коннект или нет?
Спустя 5 минут, 21 секунда (22.05.2007 - 18:47) globus написал(а):
А что ему делать кроме наследования коли ему класс запросов к базе нужен
new Users - это значит вызывается из класса (предварительно require_once)
Потому что кроме коннекта там есть еще парсинг tpl извлечение конфига движка извлечение категорий
new Users - это значит вызывается из класса (предварительно require_once)
Потому что кроме коннекта там есть еще парсинг tpl извлечение конфига движка извлечение категорий
Спустя 2 минуты, 23 секунды (22.05.2007 - 18:50) vasa_c написал(а):
Цитата
А что ему делать кроме наследования коли ему класс запросов к базе нужен
Очень много чего. Существует огромное количество вариантов для каждой конкретной ситуации.
Опиши свою иерархию классов и прокомментируй ее.
Спустя 17 минут, 38 секунд (22.05.2007 - 19:07) globus написал(а):
Хотел кратко не вышло значит будет полно
Есть главный класс
class.main.php
Есть класс запросов к базе class.sql.php
require_once(SystemDir.'sql.class.php');
class Main extends sql
{
...
}
Также есть другие классы а именно
class.categoies.php
class.LotsInCat.php
class.IndividualLot.php
1)Главная страница(показ всех категорий)
2)Страница просмотра выбранной категории
3)Просмотр выбранного товара
Подключением всех этих классов занимается index.php
Каждый из 3 классов наследует главный класс,а тот в свою очередь наследует класс запросов к базе
В главном классе описаны
Создание шаблона
Извлечение товаров(акции и прочии хреновины
Извелечение категорий для быстрой навигации
И прочая хрень которая отображается на каждой странице
Так вот класс users обеспечивает
1)Извлечение группы юзера
2)Извлечение настроек юзера
3)Извлечение корзины юзера
Задача присвоить все функции класса sql классу users без перегрузки класса(его 2 вызова) - это реально?
Класс users вызывается из главного класса
Есть главный класс
class.main.php
Есть класс запросов к базе class.sql.php
require_once(SystemDir.'sql.class.php');
class Main extends sql
{
...
}
Также есть другие классы а именно
class.categoies.php
class.LotsInCat.php
class.IndividualLot.php
1)Главная страница(показ всех категорий)
2)Страница просмотра выбранной категории
3)Просмотр выбранного товара
Подключением всех этих классов занимается index.php
Код
define ('SystemDir','./system_classes/');
define ('PublicDir','./public_classes/');
define ('ThemeDir','../../templates/base/');
require_once ('system_classes/main.class.php');
switch(@$_GET['pro'])
{
case 'viewcat' : require 'public_classes/LotsInCat.php';
case 'viewlot' : require 'public_classes/class.IndividualLot.php';
default : require 'public_classes/class.categoies.php';
}
define ('PublicDir','./public_classes/');
define ('ThemeDir','../../templates/base/');
require_once ('system_classes/main.class.php');
switch(@$_GET['pro'])
{
case 'viewcat' : require 'public_classes/LotsInCat.php';
case 'viewlot' : require 'public_classes/class.IndividualLot.php';
default : require 'public_classes/class.categoies.php';
}
Каждый из 3 классов наследует главный класс,а тот в свою очередь наследует класс запросов к базе
В главном классе описаны
Создание шаблона
Извлечение товаров(акции и прочии хреновины
Извелечение категорий для быстрой навигации
И прочая хрень которая отображается на каждой странице
Так вот класс users обеспечивает
1)Извлечение группы юзера
2)Извлечение настроек юзера
3)Извлечение корзины юзера
Задача присвоить все функции класса sql классу users без перегрузки класса(его 2 вызова) - это реально?
Класс users вызывается из главного класса
Спустя 8 минут (22.05.2007 - 19:15) vasa_c написал(а):
1. Ты опять рассказываешь как у тебя все устроена (причем сумбурно), но не рассказываешь почему и для чего.
2. Зачем наследовать SQL всеми подряд?
Почему не сделать просто статический класс, а там где нужно, запрашивать его методы?
Параметры базы где хранятся? Если в SQL-классе, то получается все наследующие объекты хранят свои экземпляры параметров?
Тоже самое и насчет наследования main всеми подряд.
Чем принципиально отличается users от categories?
Почему categories нормально наследуется от main не вызывая в конструкторе лишнего коннекта и разбора шаблонов, а users вызывает?
2. Зачем наследовать SQL всеми подряд?
Почему не сделать просто статический класс, а там где нужно, запрашивать его методы?
Параметры базы где хранятся? Если в SQL-классе, то получается все наследующие объекты хранят свои экземпляры параметров?
Тоже самое и насчет наследования main всеми подряд.
Чем принципиально отличается users от categories?
Почему categories нормально наследуется от main не вызывая в конструкторе лишнего коннекта и разбора шаблонов, а users вызывает?
Спустя 1 минута, 26 секунд (22.05.2007 - 19:17) Timok написал(а):
Спустя 20 минут, 17 секунд (22.05.2007 - 19:37) globus написал(а):
Млин класс main -САМЫЙ ГЛАВНЫЙ он связывает все классы с классом запросов к базе!также загружает инфу которая выводится на всех страницах!Класс юзерс -уже сказал что делает иногда он вызывается из майн класса а иногда когда нада что то проверить вызывается из других классов
Млин вы мне можете сказать МОЖНО ЛИ ПЕРЕДАТЬ ВСЕ ФУНКЦИИ КЛАССА ДРУГОМУ КЛАССУ БЕЗ НАСЛЕДОВАНИЯ И ЕГО ВЫЗОВА?
Млин вы мне можете сказать МОЖНО ЛИ ПЕРЕДАТЬ ВСЕ ФУНКЦИИ КЛАССА ДРУГОМУ КЛАССУ БЕЗ НАСЛЕДОВАНИЯ И ЕГО ВЫЗОВА?
Спустя 43 минуты, 51 секунда (22.05.2007 - 20:21) Ghost написал(а):
Цитата
МОЖНО ЛИ ПЕРЕДАТЬ ВСЕ ФУНКЦИИ КЛАССА ДРУГОМУ КЛАССУ БЕЗ НАСЛЕДОВАНИЯ И ЕГО ВЫЗОВА?
читать про шаблон делегирования
Спустя 24 минуты, 52 секунды (22.05.2007 - 20:46) vasa_c написал(а):
Цитата
Млин вы мне можете сказать МОЖНО ЛИ ПЕРЕДАТЬ ВСЕ ФУНКЦИИ КЛАССА ДРУГОМУ КЛАССУ БЕЗ НАСЛЕДОВАНИЯ И ЕГО ВЫЗОВА?
Не ори. Пытался тебе указать что ты делаешь фигню. Не хочешь слушать, не надо, читай про шаблон делегирования и насилуй себе мозги дальше.
Спустя 2 часа, 31 секунда (22.05.2007 - 22:46) Patrick написал(а):
Чесно говоря даже стрёмно становится от таких познаний в ООП!
1. Начни давать осмысленные названия классам и методам!
2. Зачем тут наследование
3. Начни с основ ООП, благо литературы много
Timok, final тут не причём!
Ghost, с патернами рановато...
1. Начни давать осмысленные названия классам и методам!
2. Зачем тут наследование
3. Начни с основ ООП, благо литературы много
Timok, final тут не причём!
Ghost, с патернами рановато...
Код
<?php
class Main
{
public function __construct()
{
SQL::Instance();
}
public function getContent()
{
$user = new User();
$user->getUserGroup();
}
}
class SQL {
public static $link = false;
private function __construct()
{
// подключаем БД
}
public static function Instance()
{
if(!self::$link)
{
self::$link = new SQL;
}
return self::$link;
}
public function Execute($sql)
{
//выполняет SQL запрос
}
}
class User
{
public function getUserGroup()
{
SQL::$link->execute('запрос');
}
public function getUserSetting()
{
}
}
?>
class Main
{
public function __construct()
{
SQL::Instance();
}
public function getContent()
{
$user = new User();
$user->getUserGroup();
}
}
class SQL {
public static $link = false;
private function __construct()
{
// подключаем БД
}
public static function Instance()
{
if(!self::$link)
{
self::$link = new SQL;
}
return self::$link;
}
public function Execute($sql)
{
//выполняет SQL запрос
}
}
class User
{
public function getUserGroup()
{
SQL::$link->execute('запрос');
}
public function getUserSetting()
{
}
}
?>
Спустя 1 час, 8 минут, 36 секунд (22.05.2007 - 23:55) Ghost написал(а):
Скорее всего vasa_c прав, и это ему не нужно, но чел вполне может сам выбрать, знал бы только из чего выбирать
Спустя 9 часов, 41 минута, 59 секунд (23.05.2007 - 09:37) globus написал(а):
спасибо Patrick,но что такое self?упс....
Спустя 10 минут, 17 секунд (23.05.2007 - 09:47) Patrick написал(а):
обращене к статическим методам данного класса...
http://www.php.net/manual/ru/language.oop5.static.php - тут подробно!
http://www.php.net/manual/ru/language.oop5.static.php - тут подробно!
Спустя 4 часа, 50 минут, 41 секунда (23.05.2007 - 14:38) globus написал(а):
Млин народ обьясните,я учу ООП по книжке,в нем как вы уже поняли я полный ноль,так вот ни черта не понимаю,с англ проблемы.
Patrick привел мне пример,да он работает но мне не понятен в частности смысл функции Instance();
Также я писал не только про эти 3 класса есть еще классы модулей - форума и новостей,так вот они же тоже должны иметь доступ к операциям с базой-как поступить в этом случае.Ведь как я понял теперь index.php надо будет заменить на class Main,он будет все это делать,класс определит какой модуль надо загрузить,но как сделать чтобы загруженный класс(модуль) смог совершать операции с базой через sql класс.
Patrick привел мне пример,да он работает но мне не понятен в частности смысл функции Instance();
Также я писал не только про эти 3 класса есть еще классы модулей - форума и новостей,так вот они же тоже должны иметь доступ к операциям с базой-как поступить в этом случае.Ведь как я понял теперь index.php надо будет заменить на class Main,он будет все это делать,класс определит какой модуль надо загрузить,но как сделать чтобы загруженный класс(модуль) смог совершать операции с базой через sql класс.
Спустя 1 час, 34 минуты, 23 секунды (23.05.2007 - 16:12) vasa_c написал(а):
Если ты полный ноль, то не нервничай, а спокойно опиши проблему.
И не рассказывай то что ты делаешь со всеми этими main, еще раз повторю, ты делаешь все неправильно.
А расскажи зачем ты это делаешь и чего хочешь добиться.
Про SQL я тебе уже сказал. Определяешь отдельный класс:
Там где надо:
и ничего никуда не наследуется.
Да, замена файла index.phph на класс Main это самое то, чего нам и не хватает.
И не рассказывай то что ты делаешь со всеми этими main, еще раз повторю, ты делаешь все неправильно.
А расскажи зачем ты это делаешь и чего хочешь добиться.
Про SQL я тебе уже сказал. Определяешь отдельный класс:
Код
class SQL {
public static function query(...) { // Запрос к базе
...
}
...
}
public static function query(...) { // Запрос к базе
...
}
...
}
Там где надо:
Код
SQL::query(...);
и ничего никуда не наследуется.
Цитата
как я понял теперь index.php надо будет заменить на class Main
Да, замена файла index.phph на класс Main это самое то, чего нам и не хватает.
Спустя 2 часа, 28 минут, 25 секунд (23.05.2007 - 18:41) globus написал(а):
ммм.спасибо,теперь я допер,но так как с анг. проблемы поясните мне что такое статическая функция и переменная,я понимаю это под переменной которую нельзя удалить привести к нулю,но вот что значит это в функции.
Вы показали как обратится к методу класса(спасибо еще раз) а вот как обратится к атрибуту класса
Вы показали как обратится к методу класса(спасибо еще раз) а вот как обратится к атрибуту класса
Спустя 1 час, 11 минут, 31 секунда (23.05.2007 - 19:52) levis написал(а):
ОЙ форумом ошибся,мля,гы бывает же
Спустя 16 часов, 49 минут, 33 секунды (24.05.2007 - 12:42) globus написал(а):
забудьте про предидущий вопрос
Новая проблема
Смотрите из главного класса
function __construct()
{
SQL::__construct();
$this->UserAut=users::__construct();
Smarty::Smarty();
Smarty::assign('d','a');
self::CaseModules();
}
Так вот мне на это выдают что
Fatal error: Call to undefined method index::assign() in templateclass\smarty.class.php on line 570
Почему такое происходит,если в классе smarty эта функция прописана
Новая проблема
Смотрите из главного класса
function __construct()
{
SQL::__construct();
$this->UserAut=users::__construct();
Smarty::Smarty();
Smarty::assign('d','a');
self::CaseModules();
}
Так вот мне на это выдают что
Fatal error: Call to undefined method index::assign() in templateclass\smarty.class.php on line 570
Почему такое происходит,если в классе smarty эта функция прописана
Спустя 18 дней, 9 часов, 1 минута, 58 секунд (12.06.2007 - 21:44) Patrick написал(а):
ты теперь все будешь через :: вызывать?
Спустя 1 год, 20 дней, 14 часов, 49 минут, 53 секунды (3.07.2008 - 12:34) Sylex написал(а):
Цитата(Patrick @ 23.5.2007, 2:46) [snapback]21047[/snapback]
Чесно говоря даже стрёмно становится от таких познаний в ООП!
1. Начни давать осмысленные названия классам и методам!
2. Зачем тут наследование
3. Начни с основ ООП, благо литературы много
Timok, final тут не причём!
Ghost, с патернами рановато...
1. Начни давать осмысленные названия классам и методам!
2. Зачем тут наследование
3. Начни с основ ООП, благо литературы много
Timok, final тут не причём!
Ghost, с патернами рановато...
Код
<?php
class Main
{
public function __construct()
{
SQL::Instance();
}
public function getContent()
{
$user = new User();
$user->getUserGroup();
}
}
class SQL {
public static $link = false;
private function __construct()
{
// подключаем БД
}
public static function Instance()
{
if(!self::$link)
{
self::$link = new SQL;
}
return self::$link;
}
public function Execute($sql)
{
//выполняет SQL запрос
}
}
class User
{
public function getUserGroup()
{
SQL::$link->execute('запрос');
}
public function getUserSetting()
{
}
}
?>
class Main
{
public function __construct()
{
SQL::Instance();
}
public function getContent()
{
$user = new User();
$user->getUserGroup();
}
}
class SQL {
public static $link = false;
private function __construct()
{
// подключаем БД
}
public static function Instance()
{
if(!self::$link)
{
self::$link = new SQL;
}
return self::$link;
}
public function Execute($sql)
{
//выполняет SQL запрос
}
}
class User
{
public function getUserGroup()
{
SQL::$link->execute('запрос');
}
public function getUserSetting()
{
}
}
?>
а если надо юзать 2 БД?
Спустя 3 дня, 12 часов, 25 минут, 33 секунды (7.07.2008 - 00:59) LoneCat написал(а):
Ну, как говорит один человек на моей работе - наследовать велосипед от колеса это несколько нелогично Хотя я встречал код в котором основной класс (необходимость которого ставится мною под сомнение) наследуется от шаблонизатора smarty и включает в себя функционал бд. Ну фигли, зато удобно, нужно в объекте пагинатора запрос сделать - $this->query(), нужно в объекте пользователя вывод на экран - $this->show(), и вполне себе создатель этого кода уютно поживает, пока весь остальной мир протирает себе плешь с абстракциями и паттернами, уже кучу средних габаритов проектов подобным образом сделал, ему-бы в php множественное наследование - и был-бы воистину темным властелином!
2 Sylex:
Тогда надо создать два Main!
2 Автор:
Если в твоем коде изменить свойства на переменные, а методы на функции - что изменится? Подумай над этим, раз ООП считают таким инновационным подходом - он наверное позволяет нечто большее, нежели процедурный подход, а если в коде реализованном обоими подходами - разницы нет, то наверное один из подходов используется неправильно.
2 Sylex:
Тогда надо создать два Main!
2 Автор:
Если в твоем коде изменить свойства на переменные, а методы на функции - что изменится? Подумай над этим, раз ООП считают таким инновационным подходом - он наверное позволяет нечто большее, нежели процедурный подход, а если в коде реализованном обоими подходами - разницы нет, то наверное один из подходов используется неправильно.
Спустя 8 часов, 4 минуты, 50 секунд (7.07.2008 - 09:04) AndryG написал(а):
Цитата
new Users - это значит вызывается из класса (предварительно require_once)
Потому что кроме коннекта там есть еще парсинг tpl извлечение конфига движка извлечение категорий
Потому что кроме коннекта там есть еще парсинг tpl извлечение конфига движка извлечение категорий
Я в таком случае в главный класс подключаю свойствами нужные мне узкоспециализованные классы, которые делаю "Синглтонами"
Код
<?php
class Singletone {
protected static $instance=null;
public static function getInstance($class_name){
if(is_null(self::$instance)){
self::$instance = new $class_name ();
}
return self::$instance;
}
protected function __construct(){
}
}
?>
class Singletone {
protected static $instance=null;
public static function getInstance($class_name){
if(is_null(self::$instance)){
self::$instance = new $class_name ();
}
return self::$instance;
}
protected function __construct(){
}
}
?>
Такие классы никогда не создаются повторно ... следовательно .. везде, где требуется такой класс вызываем class::getInstance() -- и получаем ухе СУЩЕСТВУЮЩИЙ класс.
Я думаю, что это решает Вашу проблему.
_____________