Как изменить язык интерфейса в NetBeans 8.0 на английский?

В NetBeans очень не нравится тот факт, что для русской винды он показывает русский интерфейс, в котором едут буквы. Это некрасиво как минимум. Статья продолжает быть актуальной для версий NetBeans 7.4 и 8.0.

Задача.

В NetBeans отображается русский интерфейс. Нужно переключить на английский.

Решение.

Открываем конфигурационный файл netbeans.conf для редактирования, который находится по адресу Х:\Program Files\NetBeans 8.0\etc для Windows или по адресу ./netbeans-8.0/etc/netbeans.conf для Linux.

Находим опцию netbeans_default_options и дописываем в конец до символа закрывающих кавычек:
-J-Duser.language=en -J-Duser.region=US

Спасибо источнику:
http://tigor.com.ua/blog/2011/08/10/set-netbeans-user-interface-language/

Английский вариант:
https://blogs.oracle.com/tao/entry/set_netbeans_user_interface_language

 

 

Тестирование статических методов в PHPUnit

С введением позднего статического связывания в PHP 5.3 появилась возможность красиво протестировать статические методы тестируемого класса.

Допустим у нас есть класс Foo, с двумя методами doSomething() и prefix(). Последний статический и вызывается внутри doSomething().

1
2
3
4
5
6
7
8
9
10
11
12
class Foo {
    public function doSomething($var)
    {
        $prefix = static::prefix();
        return $prefix . $var;
    }
    public static function prefix()
    {
        return 'foo';
    }
}

Хочу обратить внимание на строчку #4. Здесь используется static:: вместо self::

Задача:
Подменить выполнение статического метода prefix() внутри doSomething().

Решение:
Создаем мок на тестируемый класс. Для него генерируется уникальное имя, которое мы извлекаем с помощью getMockClass(). Используем staticExpects() для подмены результата вызова статического метода.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class FooTest extends PHPUnit_Framework_TestCase {
    public function testDoSomething()
    {
        $foo = $this->getMock('Foo', array('prefix'));
        $class = $this->getMockClass('Foo', array('prefix'));
        $class::staticExpects($this->any())
            ->method('prefix')
            ->will($this->returnValue('bar'));
        $this->assertEquals('bar9', $foo->doSomething('9'));
    }
}

По сути staticExpects()  является аналогом expects() только для статических классов. Единственное (и одно из самых главных) ограничений заключается в том, что мокнуть статический метод можно только внутри тестируемого класса. Это еще один минус в пользу использования статических методов.

Еще одно похожее решение:
Можно еще воспользоваться строителем мока

1
2
3
4
5
6
7
8
9
10
11
12
    public function testDoSomething3()
    {
        $foo = $this->getMockBuilder('Foo')
            ->setMethods(array('prefix'))
            ->getMock();
        
        $foo::staticExpects($this->any())
            ->method('prefix')
            ->will($this->returnValue('bar'));
        
        $this->assertEquals('bar9', $foo->doSomething('9'));
    }

Источник: http://sebastian-bergmann.de/archives/883-Stubbing-and-Mocking-Static-Methods.html

Пользовательские функции в объектно-ориентированном PHP

В PHP есть множество функций, которые позволяют в качестве параметра использовать имя так называемой user defined function — функция, написанная для собственных нужд. Все было хорошо, пока не перешел на ООП.

Как указать в ООП имя собственной функции? Очень просто.

Допустим, мы хотим использовать функцию array_walk(). В процедурном стиле мы бы написали следующее:

1
array_walk($array_values, 'myFunction');

В ООП эта конструкция не сработает, но есть выход:

1
array_walk($array_values, array($this, 'myFunction'));

Указав массив array($this, ‘myFunction’) мы указываем, что нужно использовать метод “myFunction” из текущего класса.

P.S. По ходу работы пришлось вспомнить использование этой конструкции. Благо, давным-давно интересовался этим вопросом и результат оказался в песочнице.

Онлайн тестирование

Всегда мечтал об русско-язычком онлайн тестировании. Есть Тесты по популярным языкам программирования, в том числе и PHP. Только вот засада, можно пройти только пять тестов в сутки. Есть система поощрений, за каждый вклад начисляются баллы, с помощью которых можно вскоре получить сертификат при прохождении определенных тестов. Желаю успехов!

Посмотреть можно по адресу http://www.quizful.net/

P.S. За публикацию ссылки обещались вознаградить, ждемс 🙂

PHP песочница

Сегодня создал песочницу для маленьких и, возможно, полезных скриптов на php. Доступно для свободного скачивания совсем недалеко

UPD:
Недавно нашел сайтец, где можно онлайн протестировать код, в том числе и на PHP. Попробуйте https://eval.in/

$_COOKIE не входит в $_REQUEST

Оказывается в PHP 5.3.0 по умолчанию массив $_COOKIE не входит в массив $_REQUEST. это может вызвать проблемы с переходом от версии 5.2.х.
Решение:
В файле настроек php.ini указать в директиве request_order букву С. Например: request_order=GPC