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

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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 4 дня
Карма: 87




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

blink.gif


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 4 дня
Карма: 87




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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 4 дня
Карма: 87




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

$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] Дата
Цитировать сообщение

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1755
Пользователь №: 20757
На форуме: 6 лет, 10 месяцев, 5 дней
Карма: 184




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
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 4 дня
Карма: 87




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



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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 4 дня
Карма: 87




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


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

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

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

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


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

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



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

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


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

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


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

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

Зачем ворошить старое, когда можно наворотить новое?

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

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



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

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




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

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

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



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

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 4 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 14 дней


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

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

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

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

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


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

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

Зачем ворошить старое, когда можно наворотить новое?

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

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



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25990
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 23 дня
Карма: 725

Не курю:
1 год, 2 месяца, 10 дней


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


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

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



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25990
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 23 дня
Карма: 725

Не курю:
1 год, 2 месяца, 10 дней


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


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DedMorozzz  
Дата
Цитировать сообщение

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



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

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 4053
Пользователь №: 19498
На форуме: 7 лет, 1 месяц, 10 дней
Карма: 89




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]  Ответ в темуСоздание новой темыСоздание опроса