グローバルスコープでティックを使用するには、呼び出し元のスクリプトの先頭にティックを含める必要があります。これがおそらくあなたがそれを再宣言しなければならない理由です。私はあなたのコードを知らずに確かに言うことはできません。以下は、単体テストで機能するいくつかの例です。
IIRCは、次の構成によってコードで自分のティックを宣言できます。
function tick_function() {
// Do something
}
register_tick_function('tick_function');
declare (ticks=1) {
// Your code here
}
または実用的な例として
function profile_memory()
{
echo '<!--' . memory_get_usage() . '-->';
}
register_tick_function('profile_memory');
declare (ticks=1)
{
$pass = md5('qwerty'); /* Tick executed */
$pass = strrev($pass); /* Tick executed */
echo $pass; /* Tick executed */
}
これは、単体テスト内で機能する自己完結型のティック関数の実用的な例です。
class TickTest {
private function profile_memory() {
static $i;
++$i;
echo "Tick $i\n";
}
public function __construct() {
}
public function doTicks() {
$register_tick_function = register_tick_function(
array($this,'profile_memory')
);
declare (ticks=1) {
$pass = md5('qwerty'); /* Tick executed */
$pass = strrev($pass); /* Tick executed */
}
}
}
そして、これは単体テストです(そして、はい、それが実際のテストではないという事実を知っています)
require_once 'PHPUnit/Framework.php';
require_once dirname(__FILE__).'/../ticks.php';
class TickTestTest extends PHPUnit_Framework_TestCase {
protected $object;
protected function setUp() {
$this->object = new TickTest;
}
protected function tearDown() {
}
public function testDoTicks() {
$this->object->doTicks();
}
}
出力を見ると、単体テストの実行時にティック関数が呼び出されます。
いくつかの参考文献