PHP nasıl bir sınıf içinde bir gönderme tablo oluştururum?

3 Cevap php

Ben özel bir gönderme tablo ile bir sınıf var demek.

$this->dispatch = array(
    1 => $this->someFunction,
    2 => $this->anotherFunction
);

Ben o zaman ararsam

$this->dispatch[1]();

Ben yöntemi bir dize değil bir hata alıyorum. : Ben böyle bir dize yaptığınızda

$this->dispatch = array(
    1 => '$this->someFunction'
);

This produces Fatal error: Call to undefined function $this->someFunction()

Ben de kullanarak denedi:

call_user_func(array(SomeClass,$this->dispatch[1]));

Sonuçlanan Message: call_user_func(SomeClass::$this->someFunction) [function.call-user-func]: First argument is expected to be a valid callback.

Edit: Ben birSınıf çağırıyor çünkü bu gerçekten mantıklı olmadığını :: $ bu $ bu SomeClass olduğunda gerçekleştirdi. Ben içeren dizi ile, bu birkaç yolu denedim

array($this, $disptach[1])

Bu hala ne gerek gerçekleştirmek değildir.

End edit

Ben bir sınıf var ve sadece bazı fonksiyonları ile gönderme dosyası yoksa bu çalışır. Örneğin, bu işleri:

$dispatch = array(
    1 => someFunction,
    2 => anotherFunction
);

Ben hala yine sevk tablosu ile bunları kullanmak sınıfında özel yöntemler olarak bu tutabilirsiniz bir yol olup olmadığını merak ediyorum.

3 Cevap

Sen gibi sevk de yöntemin adı saklayabilirsiniz:

$this->dispatch = array('somemethod', 'anothermethod');

ve daha sonra kullanımı:

$method = $this->dispatch[1];
$this->$method();

Fonksiyonların call_user_func * Aile bu gibi çalışması gerekir:

$this->dispatch = array('somemethod', 'anothermethod');
...
call_user_func(array($this,$this->dispatch[1]));

Kılavuzda callback pseudo-type bakın.