Я пытаюсь создать интерфейс из mirrorMethods для одного из моих классов, и у меня возникла проблема, когда метод getDocComments () не работает в моей промежуточной среде.
Вот тестовый код, который я использую:
<?php
class foo
{
/**
* Method bar description
*
* @param string $param1
* @param int $param2
* @return array
*/
public static function bar($param1, $param2 = 0)
{
return array();
}
}
$r = new ReflectionMethod('foo', 'bar');
$docBlock = $r->getDocComment();
echo $docBlock;
В моей промежуточной среде $ docBlock пуст (установите значение false, если я его var_dump ()).
Версия PHP, которую я имею в промежуточной среде: PHP Version 5.5.30-1~dotdeb+7.1
,
В моей местной среде, с PHP Version 5.6.27-0+deb8u1
Вроде бы работает.
Эта проблема может быть очень специфичной для моей среды, однако я не могу воспроизвести ее на любом обнаруженном мной онлайн-тестере php (я проверил его с PHPTester а также Онлайн PHP функции которые позволяют тестировать несколько версий PHP, но ни одна из них не имела точной версии, которую я имею в своей среде.
Хорошо, похоже Zend OPcache был активирован в этой среде со следующими параметрами:
; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
opcache.save_comments=0
; If disabled, PHPDoc comments are not loaded from SHM, so "Doc Comments"; may be always stored (save_comments=1), but not loaded by applications
; that don't need them anyway.
;opcache.load_comments=1
с opcache.save_comments
При значении 0 все комментарии (включая docBlocks) удаляются, поэтому не читаются.
Других решений пока нет …