Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> eval(), не колхоз ли делать такую конструкцию?
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 2 месяца, 20 дней
Карма: 88




xlebosol
+...завтра буду уже разбираться что такое
Цитата
$it = new RecursiveIteratorIterator( new RecursiveArrayIterator($str2));

blink.gif


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 2 месяца, 20 дней
Карма: 88




Всем большое спасибо.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 2 месяца, 20 дней
Карма: 88




Читаю про итераторы вот создал пример:

$input = array(1, 2, 3, 4, 5);
$a= new ArrayObject($input);
$count = $a->count();
echo 'Через итератор:'.$count.'<br>Обычно:'.count($input);



Я не могу понять когда их применять. Может пример превел неудобный, можете объяснить по опыту, когда их применять предпочтительнее?

Прочитал, что во время:

$a= new ArrayObject($input);


в отличии от foreach не делается копия массива в памяти, что как-бы легче, но тем не менее задействует весь этот огромный класс. Т.е. как я понимаю бессмысленно его задействовать для небольших массивов.

Спасибо.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
kaww  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1867
Пользователь №: 20757
На форуме: 15 лет, 3 месяца, 21 день
Карма: 197




ABC
, ArrayObject не является итератором, он позволяет работать с объектом как с массивом.
Простой пример:
Есть гараж (Garage), в который можно парковать автомобили (car). Мы бы хотели, что бы гараж можно было обходить в цикле и получать автомобили, так же нужно знать сколько автомобилей в гараже, и должен быть въезд в этот гараж (park)

/**
* Класс, описывающий автомобиль
* Class car
*/

class Car
{
public $brand;

public function __construct($brand)
{
$this->brand = $brand;
}
}


/**
* Гараж в который можно припарковать автомобиль
* Class garage
*/

class Garage extends ArrayObject
{
public $cars = array();

public function park(Car $car)
{
$this->append($car);
}

public function getIterator()
{
$iterator = new ArrayIterator($this->cars);
return $iterator;
}

public function append($car)
{
$this->cars[] = $car;
}

public function count()
{
return count($this->cars);
}

public function getArrayCopy()
{
return $this->cars;
}
}


$garage = new Garage();
$bmw = new Car('BMW');
$garage->park($bmw);
$audi = new Car('Audi');
$garage->park($audi);
$garage->park(new Car('Mercedes'));

/** @var Car $car */
foreach ($garage as $car) {

var_dump($car->brand);
}


По сути ArrayObject имеет реализацию интерфейсов IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable. Т.е. Garage можно объявить так:
Garage implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable
и реализовать эти интерфейсы. Хотя в приведенном примере это все равно нужно сделать. т.к. реализация в ArrayObject теперь работает не верно ;)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 2 месяца, 20 дней
Карма: 88




kaww
Спасибо...буду еще разбираться.



--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3900
Пользователь №: 21196
На форуме: 15 лет, 2 месяца, 20 дней
Карма: 88




Цитата
$it = new RecursiveIteratorIterator( new RecursiveArrayIterator($str2));


Все хорошо...но $it - объект...а значит напрямую какие-то манипуляции как с массивом с ним уже невозможны.

Да и загружать в память такой класс (через ReflectionFunction или RecursiveArrayIterator) ради того , чтоб несколько массивов объединить...

Короче, все равно решил использовать eval().
Да вариант не кошерный, но самый быстрый.

В любом случае еще раз kaww, xlebosol еще раз спасибо.


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 17423
Пользователь №: 6543
На форуме: 16 лет, 7 месяцев, 20 дней
Карма: 327

Трезвый :
14 лет, 4 месяца, 30 дней


Цитата (ABC @ 21.07.2013 - 11:11)
Короче, все равно решил использовать eval(). 
Да вариант не кошерный, но самый быстрый.

Кто-нибудь сможет внятно объяснить, в чем его некошерность? Именно в данном контексте. Очень хотелось бы услышать обоснования, а не голые декларации eval()=зло.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
xlebosol  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Знатный быдлокодер
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 337
Пользователь №: 32761
На форуме: 12 лет, 11 месяцев, 4 дня
Карма: 19




Цитата (twin @ 21.07.2013 - 14:04)
Кто-нибудь сможет внятно объяснить, в чем его некошерность? Именно в данном контексте. Очень хотелось бы услышать обоснования, а не голые декларации eval()=зло.

В данном контексте ничего страшного нет. В контексте больших проектов: отсутствие прозрачности (что за чем следует), сложность поддержки и рефакторинг кода, связи с тем что куски кода могут быть где угодно (например cms NetCat, где куски кода в базе данных) и вывод осуществляется вида - eval(название переменной);. Что в свою очередь ведет к трудности понимания архитектуры приложения, так как код из базы данных может быть использован в каком то eval, какого то класса и в результате чего рефакторинг может отрицательно сказать на других частях системы. Кроме того, что выше поста я указывал на книгу создателей процессора Zend Engine 2, где они сами предупреждают об необходимости избегать использования данной функции.
PMПисьмо на e-mail пользователюICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 17423
Пользователь №: 6543
На форуме: 16 лет, 7 месяцев, 20 дней
Карма: 327

Трезвый :
14 лет, 4 месяца, 30 дней


Цитата (xlebosol @ 21.07.2013 - 13:23)
Цитата (twin @ 21.07.2013 - 14:04)
Кто-нибудь сможет внятно объяснить, в чем его некошерность? Именно в данном контексте. Очень хотелось бы услышать обоснования, а не голые декларации eval()=зло.

В данном контексте ничего страшного нет.

Так вот и не нужно декларировать вполне годную и рабочую функцию как зло. Нужно просто уметь её применять. Так же как и globals.

Дело в том, что обжегшись на молоке вы начинаете дуть на воду. ТС правильно рассудил. Нахрена нужны головняки с итераторми, если это решается проще и рациональнее с eval(). А вопрос у него - не колхоз ли?

И тут понеслось: зло! колхоз! говнокод! кто-то там где-то чего-то писал, сам не помню чего. Нибижали. Что за манера пугать людей...


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26774
Пользователь №: 21350
На форуме: 15 лет, 2 месяца, 9 дней
Карма: 756




зло - это когда руки из ж*** и мозгов нет. - а если так то и str_replace() даже зло.


--------------------
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
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26774
Пользователь №: 21350
На форуме: 15 лет, 2 месяца, 9 дней
Карма: 756




нет. не колхоз. просто нужно внимательней относиться к коду и не допускать дыр, тогда и eval() очень полезным окажется


--------------------
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
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DedMorozzz  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Эникейщик
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 4058
Пользователь №: 19498
На форуме: 15 лет, 6 месяцев, 26 дней
Карма: 90




Eval иногда единственное решение. Буть эта ф-я "плохой" ещё не было бы в принципе


--------------------
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса