30. 7. 2011

Změna přístupnosti private metody pomocí Reflection v PHP

PHP dokáže relativně snadno, pomocí reflection, zpřístupnit původně nepřístupné (private, protected) metody a property třídy. Mějmě následující třídu:

class mujClass {
 protected $data = '';
 private function badabum($input) {
  echo $input . $this->data . '';
 }
}

Nejprve zpřístupním a zavolám metodu badabum. Využiji k tomu objekt ReflectionMethod

$mujClassInstance = new \mujClass(); // muj class ma private metodu badabum
$method = new \ReflectionMethod(get_class($mujClassInstance), 'badabum');
$method->setAccessible(true); // zpristupnim si metodu
$method->invokeArgs($mujClassInstance, array('aaa')); // volani privatni metody

V případě protected property $data je postup obdobný.

$property = new \ReflectionProperty(get_class($mujClassInstance), 'data');
$property->setAccessible(true); // zpristupnim si propertu
$property->setValue($mujClassInstance, ' protected data');
$method->invokeArgs($mujClassInstance, array('bbb')); // zase zavolam badabum

echo $property->getValue($mujClassInstance);

Zpřístupnění původně nepřístupných vlastností třídy se může hodit například při testování kódu pomocí PHPUnit testů.

#php
28. 7. 2011
24. 7. 2011
24. 7. 2011
23. 7. 2011

15 užitečných tipů pro jQuery

Vytvoření prázdného jQuery objektu, který pak může sloužit jako kontejner pro další objekty.

var container = $([]);
container.add(another_element);

Nebo změna globálního nastavení pro AJAX requesty

// ajaxSetup is useful for setting general defaults:
$.ajaxSetup({
	url			: '/ajax/',
	dataType	: 'json'
});

$.ajaxStart(function(){
	showIndicator();
	disableButtons();
});

$.ajaxComplete(function(){
	hideIndicator();
	enableButtons();
});

/*
	// Additional methods you can use:
	$.ajaxStop();
	$.ajaxError();
	$.ajaxSuccess();
	$.ajaxSend();
*/

Zbytek je k nalezení zde: 15 Powerful jQuery Tips and Tricks for Developers

#jquery