Search
Write a publication
Pull to refresh
15
0
Imenem @Imenem

User

Send message
У моей девушки на HP Pavilion клавиатура с такой-же глянцевой подложкой и матовыми клавишами. Глянец покрывается пылью моментально, после чего клавиатура представляет собой ну уж очень неэстетичное зрелище.
Что в сочетании с Oxygen GTK, например, позволяет придать ему более-менее нативный вид в KDE.
Вам нужно было не молоток привязывать, а пилу. Могли бы тогда писать Медведеву на счет получения гранта на внедрение изобретения :)
Из того, что мне лично не нравится в это классе:
0. В NetBeans в отладчике не видно, что содержится в контейнере.
1. Слишком мало встроенных методов, при добавлении новых начинают возникать некоторые проблемы, приводящие к костылям:
        /**
         * Метод возвращает первый элемент контейнера
         *
         * @return      mixed|null    Первый элемент контейнера. Если контейнер пуст - null
         */
        public function get_first()
        {
            foreach($this as $value)
            {
                return $value;
            }
        }

        /**
         * Метод возвращает последний элемент контейнера
         *
         * @return      mixed|null    Последний элемент контейнера. Если контейнер пуст - null
         */
        public function get_last()
        {
            if ($this->count() == 0)
            {
                return;
            }

            $iterator = $this->getIterator();

            // перейдем к последнему элементу
            $iterator->seek($this->count() - 1);

            return $iterator->current();
        }
Замечу, что использование метода getArrayCopy() приводит к тормозам, в зависимости от размера контейнера.
2. Разработчики PHP не отходят от старых традиций. Метод, который стоило бы назвать push(), как в других языках, назвали append().
Ваш пример нельзя сократить с
$tmp = $array();
array_pop($tmp);
$array($tmp);
до
$last = array_pop($array());
это вызовет ошибку уровня E_STRICT. Данный подход, разумеется, имеет место, но методы-обертки позволяют использовать более короткий код
$last = $array->pop();
и цепочки методов
$set_fields = $query_params->get_keys->implode(' = ?, ') . ' =? ';
. Кроме того, вы вольны сами выбирать интерфейс объекта, что позволяет избавиться от legacy-кода SPL (который очень хорошо заметен в функциях работы со строками), и избавляетесь от одного из параметров вызова, который необходимо передавать в функцию.
Естественно, так как параметр конструктора напрямую передается в свойство класса. В моем примере для одномерных массивов можно использовать синтаксис
$array = new ArrayAccessable('a', 'b', 'c', 'd', 'e');
для многомерных
$array = new ArrayAccessable(array('a', 'b', 'c', 'd', 'e' => 'assoc'));
Да, не сработает. Это я скопировал пример массива из статьи. С одномерными массивами работает. Ждем сокращенного синтаксиса для объявления массивов в PHP 5.4
Я бы хотел добавить пару комментариев к вашему коду:

Класс Iteratable:

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

public function rewind() 
{
    $this->_position = 0;
}

Стоить заменить этот фрагмент на

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

public function rewind() 
{
    $this->_position = 0;
}


Это обеспечит единый интерфейс для сброса итератора. Да и вообще, код избыточен (так как задано свойство protected $_position = 0;).

Класс ArrayAccessable

public function __construct($array = null)
{
    if (!is_null($array)) {
        $this->_container = $array;
    }
}


Мне больше нравится следующий подход:


protected container;

public function __construct() 
{
    $argv = func_get_args();
    $argc = func_num_args();

    if (argc == 0)
    {
        $this->container = array();
        return;
    }

    if (        $argc == 1
        AND  is_array(argv[0])) 
    {
        $this->container = argv[0];
    } 
    else 
    {
        $this->container = argv;
    }
}


Это позволяет использовать более красивое создание объекта:

// создадим контейнер из нескольких элементов
$arrayObject = new ArrayAccessable('a', 'b', 'c', 'd', 'e' => 'assoc');
// создадим контейнер из массива
$array = array('a', 'b', 'c', 'd', 'e' => 'assoc');
$arrayObject = new ArrayAccessable($array)


Единственный недостаток заключается в том, что функции типа array_pop() не будут с ним работать.


Я для себя эту проблему решил созданием методов, которые являются обертками над функциями для работы с массивами. Например:

        /**
         * Метод возвращает контейнер со списком всех ключей объекта
         *
         * @return      Map             Контейнер со списком ключей объекта
         */
        public function get_keys()
        {
            return new self(array_keys($this->container));
        }
Добавьте репозиторий для юзеров Debian: deb notesalexp.org/debian/[version]/ [version] main
Рекомендую Китайская проблема — эпизод 1208 (№ 175) сериала «South Park»/

Мне это не нравится. Все равно как Джордж Лукас и Стивен Спилберг изнасиловали Индиану Джонса. Вставки компьютерной графики очень сильно портят впечатление в переиздании. Лучше уже посмотреть этот рип, Full HD без шумов.
Ага, щас:

imenem@localhost:~
$ cd tmp && touch test && chmod 0000 test && ls -l
итого 0
---------- 1 imenem imenem 0 Авг 20 15:14 test
imenem@localhost:~/tmp
$ sudo rm -f test && ls -la
[sudo] password for imenem:
итого 8
drwxr-xr-x  2 imenem imenem 4096 Авг 20 15:14 .
drwxr-xr-x 75 imenem imenem 4096 Авг 18 20:44 ..
И телевизор? :))
public static $allowedTytes = array(0,1);

Антипаттерн «Magic numbers» же.
Почему бы не использовать константы класса?


const T_INTEGER      = 0;
const T_STRING       = 1;
const T_ARRAY        = 2;
const T_OBJECT       = 3;
const T_BOOLEAN      = 4;
const T_FUNCTION     = 5;
const T_NULL         = 6;

public static $allowedTytes = array(self::T_INTEGER, self::T_STRING);
Странно вообще-то, исходники и тестовая сборка могуть быть с комментами, а перед заливкой на продакшн код можно автоматически прогонять через Google Closure Compiler, YUI Compressor и т.п. Код сразу будет сложнее реверсить.
Спасибо, обыскал весь экран, нашел в левом нижнем углу, перетащил вправо к ползунку. Теперь все замечательно.
С помощью «Num +» / «Num -» масштаб всегда замечательно менялся, а вот зато процент увеличения теперь не видно :(
Такой функционал есть в библиотеке WinBinder, она тоже для создания GUI-приложений на PHP, я до перехода на Linux с ее помощью пробовал писать десктопные приложения. Не знаю, что с ней сейчас, но возможность подключать сторонние библиотеки там была. На моей машине WinBinder падал при попытке выгрузить подключенную библиотеку из памяти, но импортированные функции работали нормально.
Одноглазые сиамские близнецы. Брр :)

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity