PHP'nin declare (keneler) gerçekten nasıl çalışır?

1 Cevap php

i created a signal handling class using pcntl_signal which now i want to use for sigalrm

the problem i have is that my phpunit test for testing the signalclass works (where im only using declare ticks in the signalclass), but the testclass for testing the alarm class, which in turn using the signalclass doesnt if i add declare(ticks=1) in my alarmtests it also works

i thought declare ticks is only needed at the signal handling code, which in my case is in the signalclass? but as far as i can see it is also needed for the code who calls signal handling code it doesnt even work in my alarmclass, i have to put it in my alarmtest class!?

strace'i kullanarak taşıyamazsınız sinyal kenelerin bağımsız teslim edilir

so anyone understands why i have to use declare() in my tests (sometimes)? or why do i need to declare(ticks=1) also in the code which uses it? it would mean a user needs to know how to use declare

1 Cevap

Küresel kapsamda keneler kullanmak için çağıran betiğin başında sahip olmak gerekir. Bunu redeclare için neden bu muhtemelen. Ben kodunuzu bilmeden kesin diyemeyiz. Aşağıda birim test ile çalışır bazı örneklerdir.

Sen IIRC sen şu yapısıyla kodunuzda keneler bildirebilirsiniz

function tick_function() {
    // Do something
}

register_tick_function('tick_function');

declare (ticks=1) {
    // Your code here
}

Ya da çalışan bir örnek olarak

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 */
}

Bu, bir birim testi içinde çalışan bir öz bulunan kene fonksiyonu bir çalışma örneği

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 */
        }
    }
}

Ve bu birim test (ve evet ben gerçek bir sınav değil ki farkında değilim)

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();
    }
}

Birim test yürütürken kene fonksiyon denir çıkışında bakıyor.

Bazı referanslar