Kayıtlı kapatma işlevlerinin listesine erişmek için herhangi bir yöntem var mı?Kayıtlı kapatma fonksiyonlarının listesi
5
A
cevap
9
Bir uzantı yazıp BG(user_shutdown_function_names)
'a bakabilirsiniz. Muhtemelen daha kolay register_shutdown_function
için bir kapama yapmak için kapatma fonksiyonlarını bazı dizilere kaydeder ve bunun yerine çağırır.
(Test edilmemiş)
#include "ext/standard/basic_functions.h"
//usual include suspects here
typedef struct _php_shutdown_function_entry {
zval **arguments;
int arg_count;
} php_shutdown_function_entry;
static void _shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry) /* {{{ */
{
int i;
for (i = 0; i < shutdown_function_entry->arg_count; i++) {
zval_ptr_dtor(&shutdown_function_entry->arguments[i]);
}
efree(shutdown_function_entry->arguments);
}
static int _build_shutdown_array(php_shutdown_function_entry *entry, zval *arr TSRMLS_DC)
{
zval *inner;
zval *args;
int i;
array_init(inner);
array_init(args);
Z_ADDREF_P(entry->arguments[0]);
add_assoc_zval(inner, "callback", entry->arguments[0]);
for (i = 1; i < entry->arg_count; i++) {
Z_ADDREF_P(entry->arguments[i]);
add_next_index_zval(args, entry->arguments[i]);
}
add_assoc_zval(inner, "arguments", args);
add_next_index_zval(arr, inner);
}
PHP_FUNCTION(list_shutdown_functions)
{
if (zend_parse_parameters_none() == FAILURE)
return;
if (!BG(user_shutdown_function_names)) {
ALLOC_HASHTABLE(BG(user_shutdown_function_names));
zend_hash_init(BG(user_shutdown_function_names), 0, NULL,
(void (*)(void *)) _shutdown_function_dtor, 0);
}
array_init(return_value);
zend_hash_apply_with_argument(BG(user_shutdown_function_names),
(apply_func_arg_t) _build_shutdown_array, return_value TSRMLS_CC);
}
2
Takip etmek dışında, hayır. Kayıtlı fonksiyon isimlerinin listesi PHP betiklerine açık değildir. Eğer PHP'nin kendisini genişletmeye açıksanız (bu basit bir iş olacaktır) Artefacto'un cevabına bakınız.
İlgili konular
- 1. Babil jeneratör fonksiyonlarının aktarılmasından nasıl korunulur?
- 2. kapatma -
- 3. Kayıtlı sembolü
- 4. java.lang.IllegalStateException: Kayıtlı hiç bir kayıtlı kişi yok. WebServiceTemplate
- 5. Kapatma çalışmıyor
- 6. ConfigurationItems'i kapatma
- 7. Kayıtlı tüm çerezlere erişme
- 8. Laravel'de kayıtlı rotaları görüntüleme
- 9. İstenen değeri Kayıtlı Yordam
- 10. NLog - Kayıtlı stacktrace'i
- 11. Kayıtlı video yanlış yönlendirmedir
- 12. Veriler veritabanımda kayıtlı değil
- 13. Kayıtlı sembolleri değiştirme (R)
- 14. Kayıtlı yordamları görünümlere eşleme
- 15. Python unittest kullanarak dosya yazma fonksiyonlarının birim testi nasıl yapılır
- 16. Tarih fonksiyonlarının tüm tarihlerin tarih arasındaki tarihleri gösterilmektedir
- 17. Kapatma kancasının kilitlenmesini nasıl önleyebilirim?
- 18. Yalnızca Get-Acl listesi Kullanıcılar
- 19. listesi
- 20. Kayıtlı prosedür sonuçlarını arayabilir miyim?
- 21. Kayıtlı yordamdaki tablo değişkenine erişilemiyor
- 22. IllegalArgumentException: kayıtlı değil Alıcı: com.google.android.gms.common.api
- 23. Kayıtlı form verilerinin Firefox manipülasyonu
- 24. Simülatördeki kayıtlı bir dosyayı bulma?
- 25. COMException "Kitaplık kayıtlı değil." System.DirectoryServices
- 26. EF4.1 Kod İlk: Kayıtlı Prosedürü
- 27. Geliştirme ekibi kayıtlı iPhone cihazlarında
- 28. Kayıtlı httphandlers koleksiyonunu nasıl görebilirsiniz?
- 29. Kayıtlı Yordam çağrısı LINQ yavaş
- 30. Kayıtlı bir yordam çağırma python
vay, ne derinlemesine bir cevap. Çoğu zaman PHP zaten bir şeyler yapmak için PHP seviyesinde bir işleve sahiptir, ama bu durumda değil, yine de hala bir çözüm ile geldi! –