|
andipas ↓
|
 |
|
14 Август, 2010, 10:27:00
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 2
Сообщений: 173 Сила слова: 1.16
|
Начитался здесь и не только. Пытаюсь теперь писать грамотный ООП код. Но многого еще не понимаю.
Изначально я делал по старинке, глобальные классы, что есть зло?. Теперь добавляю их в конструктор, так правильней вроде? И как вообще лучше?
К примеру у меня есть объекты $oTag, $oTopic они нужны в множестве других классов. Как быть?
И по заголовку, что значит "Зависимость на уровне интерфейсов", пытался представить как это, не вышло, приведите пожалуйста примеры. Спустя 1 минуту 26 секунд добавил глобальные объекты*
здесь нельзя править свои посты?
|
|
|
|
|
Записан
|
|
|
|
|
kostyl ↓
|
 |
|
14 Август, 2010, 12:14:41 , спустя 1 час 47 минут 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3522 Сила слова: 1.7
|
andipas, здесь надо заработать право править свои посты.
Я, например, храню глобальные данные приложения в реесре, а не очень глобальные в объектах по шаблону monostate
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|
adw0rd ↓
|
 |
|
14 Август, 2010, 12:20:04 , спустя 5 минут 23 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: в ухо Карма: не нужна
Сообщений: 17623 Сила слова: 1.67
|
можно регистрировать объекты, через статичекий метод
файл test.php
class test
{
public static setdb($db){
self::$db = $db;
}
private static $db;
}
test:: setdb($db);
|
|
|
|
|
Записан
|
|
|
|
|
kostyl ↓
|
 |
|
14 Август, 2010, 12:35:37 , спустя 15 минут 33 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3522 Сила слова: 1.7
|
adw0rd, чуть вот так надо, что бы была зависимость
class test
{
public static setdb (Db $db){
self:: $db = $db;
}
/**
* @return Db
*/
public static getDb ()
{
return self:: $db;
}
/**
* @var Db
*/
private static $db;
}
test:: setdb($db);
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|
Абырвалг ↓
|
 |
|
14 Август, 2010, 12:44:31 , спустя 8 минут 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6094 Сила слова: 1.31
|
кстати, помните я говорил, что нужно генерировать фейковые классы для автодополнения? Ну собсно говоря Фабьен так и делает, только он их же и использует, а не __call, как я планировал.
<?php
use Symfony\Components\DependencyInjection\ContainerInterface;
use Symfony\Components\DependencyInjection\Container;
use Symfony\Components\DependencyInjection\Reference;
use Symfony\Components\DependencyInjection\Parameter;
use Symfony\Components\DependencyInjection\ParameterBag\ParameterBag;
/**
* ProjectServiceContainer
*
* This class has been auto-generated
* by the Symfony Dependency Injection Component.
*/
class ProjectServiceContainer extends Container
{
protected $shared = array();
/**
* Constructor.
*/
public function __construct ()
{
parent::__construct (new ParameterBag ($this-> getDefaultParameters()));
}
/**
* Gets the 'mail.transport' service.
*
* @return Zend_Mail_Transport_Smtp A Zend_Mail_Transport_Smtp instance.
*/
protected function getMail_TransportService ()
{
$instance = new Zend_Mail_Transport_Smtp ('smtp.gmail.com', array('auth' => 'login', 'username' => $this-> getParameter('mailer.username'), 'password' => $this-> getParameter('mailer.password'), 'ssl' => 'ssl', 'port' => 465));
return $instance;
}
/**
* Gets the 'mailer' service.
*
* This service is shared.
* This method always returns the same instance of the service.
*
* @return Object A %mailer.class% instance.
*/
protected function getMailerService ()
{
if (isset($this-> shared['mailer'])) return $this-> shared['mailer'];
$class = $this-> getParameter('mailer.class');
$instance = new $class();
$this-> shared['mailer'] = $instance;
$instance-> setDefaultTransport($this-> getMail_TransportService());
return $instance;
}
/**
* Returns service ids for a given tag.
*
* @param string $name The tag name
*
* @return array An array of tags
*/
public function findTaggedServiceIds ($name)
{
static $tags = array (
);
return isset($tags[$name]) ? $tags[$name] : array();
}
/**
* Gets the default parameters.
*
* @return array An array of the default parameters
*/
protected function getDefaultParameters ()
{
return array(
'mailer.username' => 'foo',
'mailer.password' => 'bar',
'mailer.class' => 'Zend_Mail',
);
}
}
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
andipas ↓
|
 |
|
14 Август, 2010, 01:22:01 , спустя 37 минут 30 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 2
Сообщений: 173 Сила слова: 1.16
|
adw0rd, чуть вот так надо, что бы была зависимость
class test
{
public static setdb (Db $db){
self:: $db = $db;
}
/**
* @return Db
*/
public static getDb ()
{
return self:: $db;
}
/**
* @var Db
*/
private static $db;
}
test:: setdb($db);
Т.е. мне потом в других объектах обращаться к необходимым объектам через этот класс?
class Db
{
public function query ($s) {
echo $s;
}
}
class App
{
public static function setdb (Db $db){
self:: $db = $db;
}
/**
* @return Db
*/
public static function getDb ()
{
return self:: $db;
}
/**
* @var Db
*/
public static $db;
}
class Test
{
function go () {
App:: $db-> query('go go go');
}
}
$db = new Db;
App:: setdb($db);
$test = new Test ();
$test-> go();
|
|
|
|
|
Записан
|
|
|
|
|
NRG ↓
|
 |
|
14 Август, 2010, 01:58:17 , спустя 36 минут 16 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Headshot!MultiKill!
Группа: нинзя Карма: 777
Сообщений: 4700 Сила слова: 16.81
|
andipas, не делай ненужные методы типа гетДб, сетДб
ты что на каждую переменную будешь сеттер и геттер писать ?
сделай чтото типа setData($key, $value), getData($key)
|
|
|
|
|
Записан
|
Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть

|
|
|
|
krasun ↓
|
 |
|
14 Август, 2010, 02:18:03 , спустя 19 минут 46 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
|
|
kostyl ↓
|
 |
|
14 Август, 2010, 02:21:39 , спустя 3 минуты 36 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3522 Сила слова: 1.7
|
Т.е. мне потом в других объектах обращаться к необходимым объектам через этот класс?
PHP
class Db
{
public function query($s) {
echo $s;
}
}
class App
{
public static function setdb(Db $db){
self::$db = $db;
}
/**
* @return Db
*/
public static function getDb()
{
return self::$db;
}
/**
* @var Db
*/
public static $db;
}
class Test
{
function go() {
App::$db->query('go go go');
}
}
$db = new Db;
App::setdb($db);
$test = new Test();
$test->go();
не правильно, на до
/**
* @var Db
*/
private static $db; //скрытой делать.
NRG, не обязательно. Вот например если много надо получать всякой фигни, то да, а если надо получить бд, сессию, и еще одну фигню, то можно и три метода сделать только. Я делаю так
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|
andipas ↓
|
 |
|
14 Август, 2010, 02:33:39 , спустя 12 минут
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 2
Сообщений: 173 Сила слова: 1.16
|
не правильно, на до
/**
* @var Db
*/
private static $db; //скрытой делать.
Тогда здесь как быть?
class Test
{
function go() {
App::$db->query('go go go');
}
}
Ошибка будет. Т.е. этот класс использовать для вызова нужных объектов? Только я тогда не понимаю, чем это лучше global ?
|
|
|
|
|
Записан
|
|
|
|
|
kostyl ↓
|
 |
|
14 Август, 2010, 02:49:56 , спустя 16 минут 17 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3522 Сила слова: 1.7
|
class Test
{
function go() {
App::getDb()->query('go go go');
}
}
переменная db в App должна быть скрытой, иначе городить это всё смысла нет. Если она будет скрытой и соответсвовать интерфейсу Db. тогда ты сможешь подменить её другим объектом, который сможет реализовать этот интерфейс. Вопросы, что чем лучше глобал или не глобал, надо рассматривать на конкретном приложении, к конкретными ТЗ и планами развития иначе это будут спорные вопросы.
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|
Troy ↓
|
 |
|
14 Август, 2010, 03:38:22 , спустя 48 минут 26 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи Карма: 45
Сообщений: 2393 Сила слова: 1.88
|
фото на дуда вроде похоже
|
|
|
|
|
Записан
|
|
|
|
|
andipas ↓
|
 |
|
14 Август, 2010, 08:19:40 , спустя 4 часа 41 минуту 18 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 2
Сообщений: 173 Сила слова: 1.16
|
Я делаю так
Спасибо, попробую применить это в своем мини-проекте, который изначально был полностью на функциях...
|
|
|
|
|
Записан
|
|
|
|
|
andipas ↓
|
 |
|
14 Август, 2010, 09:21:44 , спустя 1 час 2 минуты 4 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Карма: 2
Сообщений: 173 Сила слова: 1.16
|
Кстати использование Registry это и есть - Зависимость на уровне интерфейсов?
|
|
|
|
|
Записан
|
|
|
|
|
krasun ↓
|
 |
|
14 Август, 2010, 09:40:15 , спустя 18 минут 31 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Джедаи
Группа: Джедаи Карма: 41
Сообщений: 1379 Сила слова: 2.97
|
Я думаю, зависимость на уровне интерфейсов - это когда, ты работаешь с объектом зная только его интерфейс.
|
|
|
|
|
Записан
|
|
|
|
|