Bu Emacs bir PHP dosyası kullanılmayan değişkenleri tespit etmek mümkün nasılsa mı?
With other languages, this is possible by using tools such as flymake. I've already enabled Flymake to show syntax errors for my PHP files on the fly, but still it's frustrating that PHP logic errors are sometimes due to situations like:
<?php
$foo = whatever();
$bar = something($fo);
...
$ Üzerinde yazım hatası not foo
O geliştirici baş ağrısı ve kahve onun fahiş kullanımına katkıda bulunacaktır.
UPDATE:
Pascal ve Gabor tarafından ipuçları sonra, benim php.ini içinde:
error_reporting = E_ALL | E_STRICT
Ben komut satırından php çalıştırdığınızda, ben şimdi (seçeneği ile ya-l olmadan) tanımsız değişken hakkında haber görmek mümkün değilim:
> php -r '$foo = 3; echo $fo;'
PHP Notice: Undefined variable: fo in Command line code on line 1
> php -r '$foo = 3; echo $fo;' -l
PHP Notice: Undefined variable: fo in Command line code on line 1
Bu şu anda benim. Emacs kullanıyorum budur. Bu ayrıştırma hataları ile mükemmel çalışıyor, ama ben yine de, hala bildirimlerle ilgili eşleşmesi mümkün değilim: (
;; FlyMake for Php (require 'flymake)
(defun flymake-php-init ()
"Use php to check the syntax of the current file."
(let* ((temp (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace))
(local (file-relative-name temp (file-name-directory buffer-file-name))))
(list "php" (list "-f" local "-l"))))
(add-to-list 'flymake-err-line-patterns
'("\\(Parse\\|Fatal\\) error: +\\(.*?\\) in \\(.*?\\) on line \\([0-9]+\\)$" 3 4 nil 2))
(add-to-list 'flymake-err-line-patterns
'("Notice: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)" 2 3 nil 1))
(add-to-list 'flymake-allowed-file-name-masks '("\\.php$" flymake-php-init))
Ben de Gabor yapılandırmasını denedim. Aynı sonuç. Hataları ile ince, bildirimler ile kötü.
Komut satırından, hatalar benziyor ayrıştırmak unutmayın:
> php -r '$fo o = 3; echo $fo;' -l
PHP Parse error: syntax error, unexpected T_STRING in Command line code on line 1
Uyarılar uyumlu değil neden ben alamadım. Ben ayrı ayrı normal ifadeyi denedim ve doğru maç gibi görünüyor:
(search-forward-regexp "Notice: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)")
PHP Notice: Undefined variable: fo in Command line code on line 1
(C-x C-e
hatlarının sonuna atlamak olacaktır).
: Son olarak, ben şimdi özürlü XDebug, bildirimler başlangıçta olarak rapor edildi beri
PHP Notice: Undefined variable: fo in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
Yani, ben biraz satırlı hataları maç regexpi değiştirmek gerekir sanırım. Bu konuda herhangi bir ipucu?