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

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

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



TERRAFORMING ENGINEER
******

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




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

blink.gif


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

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



TERRAFORMING ENGINEER
******

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




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


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

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



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3892
Пользователь №: 21196
На форуме: 7 лет, 4 месяца, 20 дней
Карма: 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] Дата
Цитировать сообщение

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



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

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




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

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




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



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

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



TERRAFORMING ENGINEER
******

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




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


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

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

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

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


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

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



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

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

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


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

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


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

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

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

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

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



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

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




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

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

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



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

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

Трезвый :
6 лет, 6 месяцев, 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  
Дата
Цитировать сообщение

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



c начала 2017 года в Новосибирске.
******

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




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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

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



c начала 2017 года в Новосибирске.
******

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




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


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DedMorozzz  
Дата
Цитировать сообщение

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



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

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 4054
Пользователь №: 19498
На форуме: 7 лет, 8 месяцев, 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]  Ответ в темуСоздание новой темыСоздание опроса