<?php
namespace Test;
trait A {
public function getClass() {return get_class();}
public function className() {return __CLASS__;}
public function traitName() {return __TRAIT__;}
public function getCalledClass() { return get_called_class(); }
public function getStaticClass() { return static::class; }
}
class B {
use A;
public function usedTraitName() {return __TRAIT__;}
}
class C extends B {}
$test = new C;
echo '$test->getClass():' . $test->getClass() . "\n"; // Test\B
echo 'get_class($class):' . get_class($test) . "\n"; // Test\C
echo '$test->className():' . $test->className() . "\n"; // Test\B
echo '$test->traitName():' . $test->traitName() . "\n"; // Test\A
echo '$test->usedTraitName():' . $test->usedTraitName() . "\n"; // ""
echo '$test->getCalledClass():' . $test->getCalledClass() . "\n"; // Test\C
echo '$test->getStaticClass():' . $test->getStaticClass() . "\n"; // Test\C
echo 'C::class:' . C::class . "\n"; // Test\C
Установка composer:
wget https://getcomposer.org/composer.phar
sudo mv composer.phar /usr/bin/composer
sudo chmod +x /usr/bin/composer
Начиная с PHP 5.4, замыкания получили методы, позволяющие контролировать анонимные функции после их создания. Нас, в первую очередь, интересует метод call, который связывает замыкание с контекстом выполнения, и вызывает его с заданными параметрами.
Итак, если у нас PHP 5.4 или выше и есть экземпляр объекта, то мы без проблем можем получить доступ к закрытым свойствам и методам, например так:
<?php
// Наш подопытный с закрытыми свойствами/методами
class Foo
{
private $test = 'TEST OK';
private function testFunc($param = '')
{
echo "Foo {$param}\n";
}
}
// Берем экземпляр объекта подопытного
$foo = new Foo();
// Создаем замыкание, которое вызовет приватный метод
// и вернет значение приватного свойства
$closure = function () {
$this->testFunc('!!!');
return $this->test;
};
// Выполняем замыкание, переопределив контекст выполнения
echo $closure->call($foo) . PHP_EOL;
Удобная библиотека реализует обертку для работы с SNMP.
Что умеет?
- Автоматически распознает версию SNMP
- Автоматически распознает устройство (Не гарантируется на всех устройствах)
- Реализован базовый функционал для работы с коммутаторами (uptime, интерфейсы, состояние портов, FDB и т.д)
- Универсальность и расширяемость библиотеки
Маленький и удобный компонент для загрузки файлов на сервер.
Список фич:
- Встроенная валидация размера, расширения и mime-типа файла
- Поддерживает загрузку как одного, так и нескольких фалов без отличий в коде
- Расширенна информация о загруженном файле
- Вывод информации о загруженном файле унифицирован
- Библиотека состоти из 1 (одного!) файла
CKEditor Images Manager
На днях понадобился WYSIWYG редактор для сайта. На данный момент одним из лучших является CKEditor. Но, не смотря на то, что плагинов к нему гора и маленькая тележка, адекватного плагина для загрузки картинок и управления ими я не нашёл. Они либо не безопасны совсем, либо требуют отдельную авторизацию(хотя редактор - часть сайта, а загрузка картинок - часть редактора, и вдруг отдельная авторизация) и у всех большая проблема с качеством кода. Поэтому появился ещё один плагин загрузки картинок и управления ими с возможностью интеграции с сайтом и гибкой настройкой.
Устанавливается, как и все плагины, путем распаковки в папку plugins CKEditor'а и добавлением в extraPlugins:
CKEDITOR.replace( 'editor1', {
extraPlugins: 'imagesmanager'
});
Плагин на Github: https://github.com/azurre/ckeditor-images-manager
sudo apt-get update
Устанавливаем необходимые пакеты:
sudo apt-get install make php5-dev php-pear libevent-dev
Все готово к установке libevent. В pear сейчас доступна версия 0.1.0:
sudo pecl install channel://pecl.php.net/libevent-0.1.0
Добавим установленный модуль в доступные к загрузке:
sudo bash -c 'echo -e "extension=libevent.so" > /etc/php5/mods-available/libevent.ini'
Добавляем модуль в загрузку PHP:
sudo php5enmod libevent
Не забываем перезагрузить WEB сервер:
sudo service apache2 restart
или
sudo service nginx restart