PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (594): « 1 [2] 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 8901
EuGen Отправлено: 08 Июля, 2014 - 16:50:01 • Тема: К private методам можно получить доступ даже за пределами этого объекта? • Форум: Объектно-ориентированное программирование

Ответов: 12
Просмотров: 3837
Мелкий пишет:
$c = $c->bindTo($obj, $obj);

Так тогда Вы получите привязку в контексте объекта (точнее, класса объекта) - это точно такая же "эмуляция" соответствующей области видимости. То есть - "извне" доступа всё равно не происходит, суть та же, что указана в примере выше, когда привязка происходит изнутри метода.

Вкратце - "извне" (из другого контекста) доступ получить не получится. bindTo с указанием области видимости как класса текущего экземпляра есть лишь встраивание кода замыкания в контекст этого класса.
EuGen Отправлено: 08 Июля, 2014 - 16:10:50 • Тема: К private методам можно получить доступ даже за пределами этого объекта? • Форум: Объектно-ориентированное программирование

Ответов: 12
Просмотров: 3837
Мелкий пишет:
Начиная с 5.4 можно штатно к любому private методу или свойству получить доступ, не имея вовсе никакого отношения к этому классу... С помощью closure::bindTo.

Нет, невозможно. Скажем,

PHP:
скопировать код в буфер обмена
  1. class Test
  2. {
  3.     private function privateMethod()
  4.     {
  5.         return 'caught';
  6.     }
  7. };
  8.  
  9. $c = function()
  10. {
  11.     return $this->privateMethod();
  12. };
  13.  
  14. $obj = new Test;
  15. $c   = $c->bindTo($obj);
  16. $c();

Вернёт вполне логичную ошибку несоответствия контекста (то есть, попытка доступа к приватному методу класса Test из контекста Closure)

Ну, а, скажем,

PHP:
скопировать код в буфер обмена
  1. class Test
  2. {
  3.     private function privateMethod()
  4.     {
  5.         return 'caught';
  6.     }
  7.  
  8.     public function publicMethod()
  9.     {
  10.         $c = function()
  11.         {
  12.                 return $this->privateMethod();
  13.         };
  14.         $c = $c->bindTo($this);
  15.         $c();
  16.     }
  17. };
  18.  
  19. $obj = new Test;
  20. $obj->publicMethod();

Будет работать - но это лишь частный случай уже рассмотренной выше проблемы, когда доступ проверяется на уровне текущего класса, а не конкретного экземпляра класса.
EuGen Отправлено: 01 Июля, 2014 - 19:12:34 • Тема: SQL - помогите, пожалуйста, с составление запросов • Форум: Напишите за меня, пожалуйста

Ответов: 4
Просмотров: 42
Опишите логику словами с примерами выборок (до/после), тогда станет понятнее, можно ли реализовать только на SQL
EuGen Отправлено: 30 Июня, 2014 - 16:12:20 • Тема: Посоветуйте видео материал по TDD • Форум: Вопросы новичков

Ответов: 3
Просмотров: 185
Ищите там, где субтитры есть, а лучше - вместе с презентацией.
EuGen Отправлено: 30 Июня, 2014 - 15:55:18 • Тема: Посоветуйте видео материал по TDD • Форум: Вопросы новичков

Ответов: 3
Просмотров: 185
Весь достойный материал - изначально на английском. И если и удастся что-то найти на другом языке, то с вероятностью 90% это будет перевод/перефразирование оригинала (не раз находил рекомандации тех или иных ресурсов, после прочтения/просмотра которых я узнавал предложения и абзацы из того, что видел в оригинале). Так что - если хочется получать качественную информацию, следует знать язык хотя бы на бызовом уровне.
EuGen Отправлено: 23 Июня, 2014 - 21:29:40 • Тема: MySQL • Форум: SQL и Архитектура БД

Ответов: 10
Просмотров: 70
DROP+CREATE (то же самое, что TRUNCATE по сути), частичное восстановление из бэкапа (операции с самой БД) - всё это также может быть причиной.
EuGen Отправлено: 18 Июня, 2014 - 15:53:59 • Тема: Передача в функцию произвольного количества указателей • Форум: Вопросы новичков

Ответов: 19
Просмотров: 719
Не вижу никакого смысла в подобной обёртке. Если сильно нужно, то можно попросту избежать такой проблемы, создав сигнатуру

PHP:
скопировать код в буфер обмена
  1. function my_bind_param(array $refs) {/*...*/}


И передавать в $refs массив из указателей. Но этот подход - плох тем, что такая обёртка совершенно нечитаема и не целостна.
EuGen Отправлено: 18 Июня, 2014 - 14:53:55 • Тема: mysql-unit • Форум: Наработки по собственным проектам

Ответов: 0
Просмотров: 1121
Приветствую,

Сегодня завершена бета-версия проекта mysql-unit. Цель - тестирование хранимого кода для MySQL. Хранимый код - достаточно редко оправдан в применении, однако тогда, когда его использование требуется, должна быть возможность его протестировать. Это и является причиной создания фреймворка.

Проект не основан на UDF, поэтому установка не потребует установки сторонних библиотек; даже перезапуск MySQL-сервера не нужен. Документация доступна здесь
EuGen Отправлено: 16 Июня, 2014 - 16:56:37 • Тема: Что лучше (классы или функции)? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 530
teddy пишет:
Да, но в корне мысль одна и та же.

Вообще - нет. Именно в корне и есть отличие. Потому что конкретный паттерн можно реализовать на каком-нибудь функциональном языке (типа Haskell) - за исключением, быть может, тех паттернов, что проистекают из объектного подхода и связаны с сохранением состояния (но называть их просто "паттернами" в таком случае - некорректно, так как они - всего лишь подкласс паттернов). И ООП здесь ни при чём. ООП - это, грубо выражаясь, "протокол более низкого уровня" по отношению к паттернам.

eai пишет:
Вконтакте на функциях наляпяли и ниче , не хужее фейсбуку

Во-первых, это отдельная история (со своими решениями), во-вторых, ради этого им пришлось.. разработать методику тестирования. И - у них не "наобум" сделана структура. Создано упрощение, но умышленное и направленное.
EuGen Отправлено: 16 Июня, 2014 - 15:55:50 • Тема: Что лучше (классы или функции)? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 530
teddy пишет:
Шаблоны проектирования, которые как правило заточены под ООП.

Шаблоны проектирования концептуально не имеют ничего общего с ООП. Дело другое, что реализации конкретных шаблонов могут быть сделаны в контексте ООП, а некоторые частные паттерны даже привязаны к этому контексту.

teddy пишет:
Мой тебе совет, сначала просто изучи возможности ООП, узнай, как это работает технически

Технически ООП никак не работает, это лишь подход. Технически работает его реализация в конкретно взятых языке и платформе.

OrmaJever пишет:
Если интересует скорость то функции быстрее, но классы в большинстве случаев удобнее

Если под скоростью имеется ввиду стек вызовов, то расходы ничтожны. Если абстракции - то зависимо от того, что требуется. Правильно спроектированное приложение не будет злоупотреблять абстракциями.

eai пишет:
Делайте как вам удобнее или как требуется для проекта.

Всё же, если это именно "проект" - то без изоляционности объектного подхода практически никуда не двинуться. Поскольку код нужно тестировать. Если это - скрипт на пару десятков строк, который что-нибудь пишет в нужный файл и делается на один раз - то - да, объектный подход вряд ли пригодится

По теме - почитайте про S.O.L.I.D. подход, тестирование кода (особенно про интеграционные тесты (то есть, как с ними работать и как свести их число к минимуму), так как с юнитами и так всё ясно). Классика Макконела тоже пригодится. Ах да, ещё про S.T.U.P.I.D. код тоже пройтись можно. Хороший набор анти-паттернов.
EuGen Отправлено: 10 Июня, 2014 - 18:42:48 • Тема: Недостатки хранимых процедур • Форум: Администрирование БД

Ответов: 8
Просмотров: 3023
TL;DR

Если вы не знаете, нужны ли вам хранимые функции/процедуры, то они вам не нужны.

Use-cases

Несмотря на очевидные недостатки, у хранимого кода есть области применения. Основная из них - когда требуется высокая безопасность и у хранимых данных нет доверия к коду, работающему с ними. Иными словами, когда разработчик приложения - не доверенное лицо. У него может не быть никаких прав, кроме вызова ограниченного набора процедур, возвращающих лишь ту часть данных, к которым у него есть доступ.

Кроме того, иногда бывает нужно реализовать вещи которые попросту отсутствуют в СУБД. Для MySQL это - например, замена по регулярному выражению. Не так давно я реализовал это. Конечно, есть UDF - но далеко не всегда возможно их использовать (равно как и устанавливать сторонние библиотеки)
EuGen Отправлено: 08 Июня, 2014 - 13:41:23 • Тема: Правильно ли создавать объекты в классах? • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 1186
TL;DR - прочесть про DI (Dependency Injection).

OrmaJever пишет:
да, почему бы и нет.

Нет, потому что это - часть "S.T.U.P.I.D." - кода.
- Tight coupling (Жёсткая связка)
- Untestability (Невозможность тестирования)
- Duplication (Дублирование)

Общеизвестный пример. Если для того, чтобы построить дом, нам нужна дверь, мы не будем её создавать, а просто возьмём готовую. Так и здесь - если для исполнения метода нужен объект, не следует его создавать, следует его передавать.
EuGen Отправлено: 06 Июня, 2014 - 17:12:46 • Тема: Код на внимательность • Форум: Прочее

Ответов: 14
Просмотров: 94
DelphinPRO пишет:
Спойлер (Отобразить)

Неверно.
EuGen Отправлено: 06 Июня, 2014 - 17:08:44 • Тема: Код на внимательность • Форум: Прочее

Ответов: 14
Просмотров: 94
LIME пишет:
EuGen а в чем закавыка?

Ни в чём. Первый - весьма простой вопрос. Требует базовых знаний. Второй - ну, для разнообразия. Если кто-либо не видел и кому интересно посмотреть глубже.
EuGen Отправлено: 06 Июня, 2014 - 17:01:41 • Тема: Код на внимательность • Форум: Прочее

Ответов: 14
Просмотров: 94
DelphinPRO пишет:
требую более интересных и заковыристых задач


Что вернёт функция foo():
PHP:
скопировать код в буфер обмена
  1. function foo()
  2. {
  3.     return $result = bar() ? $result : false;
  4. }
  5.  
  6. function bar()
  7. {
  8.     return "baz";
  9. }

?

Если кто-нибудь ещё не видел, то
EuGen пишет:
Поясните, почему в PHP следующие две программы дадут одинаковый результат (3) :

и
CODE (php):
скопировать код в буфер обмена
  1. $x = 1;
  2. $y = $x + $x + $x++;


Помочь понять это (а, может, наоборот, запутать) вам может следующая конструкция:
CODE (php):
скопировать код в буфер обмена
  1.   $x = 1;
  2. @ $y = $x + $x++;
  3. var_dump($y); // int(2)


Страниц (594): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB