Если вы посмотрите на примеры для Callbacks / Callables , вы увидите различные способы указать объект и метод класса array($object, 'method')
и array('className', 'method')
.
Если вы хотите чтобы понять, почему это работает с закрытыми методами, это потому, что $this
является текущим объектом и, конечно, имеет доступ к своим собственным закрытым методам.
array('someDifferentClass', '_shield')
и array($someDifferentObj, '_shield')
НЕ будут работать, если _shield()
был private
в другом классе.
Вы также можете использовать анонимные функции:
$content = preg_replace_callback("/(<\/?[^>]+\s+[^>]*>)/",
function($v) {
return $this->_shield($v);
}, $content);
Что меня здесь заставило array(1,2)
вернуло бы массив [1,2]
, затем почему array($object, 'method')
возвращает метод вместо массива с $object
его первым элементом, а строка 'method' - вторым?
Возвращает массив с $object
его первым элемент и строка 'method' являются вторыми. Но затем preg_replace_callback
использует эти фрагменты информации в массиве для вызова метода. Вы можете сделать то же самое в PHP:
$method = array($this, '_shield');
$truncate = ${$method[0]}->{$method[1]}($content);