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

Установка composer:

wget https://getcomposer.org/composer.phar
sudo mv composer.phar /usr/bin/composer
sudo chmod +x /usr/bin/composer

 

Доступ к приватным свойствам и методам в PHP

Начиная с 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 и т.д)
  • Универсальность и расширяемость библиотеки

Короткоhttps://github.com/azurre/php-simple-snmp

Маленький и удобный компонент для загрузки файлов на сервер.

 

Список фич:

  1. Встроенная валидация размера, расширения и mime-типа файла
  2. Поддерживает загрузку как одного, так и нескольких фалов  без отличий в коде
  3. Расширенна информация о загруженном файле
  4. Вывод информации о загруженном файле унифицирован
  5. Библиотека состоти из 1 (одного!) файла

Короткоhttps://github.com/azurre/php-simple-file-uploader

CKEditor Images Manager

На днях понадобился WYSIWYG редактор для сайта. На данный момент одним из лучших является CKEditor. Но, не смотря на то, что плагинов к нему гора и маленькая тележка, адекватного плагина для загрузки картинок и управления ими я не нашёл. Они либо не безопасны совсем, либо требуют отдельную авторизацию(хотя редактор - часть сайта, а загрузка картинок - часть редактора, и вдруг отдельная авторизация) и у всех большая проблема с качеством кода. Поэтому появился ещё один плагин загрузки картинок и управления ими с возможностью интеграции с сайтом и гибкой настройкой.

Устанавливается, как и все плагины, путем распаковки в папку plugins CKEditor'а и добавлением в extraPlugins:

CKEDITOR.replace( 'editor1', {
  extraPlugins: 'imagesmanager'
});

Плагин на Githubhttps://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