PHP Dinamik mantıksal ifade ayrıştırma / değerlendirme?

5 Cevap php

Ben bazı PHP sayfalarda karmaşıklıkta kullanıcı-tanımlı mantıksal ifadeleri değerlendirmek için bir ihtiyaç var. : Form alanları birincil değişkenler olduğunu varsayarak, bu gerekir

  • substitute"varibles" for form fields values;
  • handle comparison operators, minimally ==, <, <=, >= and > by symbol, name (eg eq, lt, le, ge, gt respectively);
  • handle boolean operators not, and, or and possibly xor by name, symbol (eg !, &&, || and ^^ respectively);
  • handle literal values for strings and numbers;
  • be plaintext not XML (eg "firstname == '' or lastname == ''); and
  • makul ölçülebilir olması.

Şimdi yıllarda çok ben en azından alacak orada şeyler vardır umut ediyorum ben bir ifade ağacı oluşturmak ve bu tür bir şey yapmak ama ben PHP relishing olduğum bir görev değil şu ki recursive asıllı ayrıştırıcılarını yazdım gitti beni orada bazı yol.

Önerileriniz?

5 Cevap

create_function, ben onun performansı hakkında emin değilim, geçirilen dize parametreleri bir anonim işlev oluşturur, ama çok esnek edin ...

Ben doğru sorunu anlamak, kullanıcıların olmayan PHP fonksiyonlarını yazmak için, ve sonra PHP yorumlamak var mı istiyorsun?

Eğer öyleyse, sadece kendi dize almak ve "<" ile "lt" yerini alabilir ve ">" ... sonra eval do () ile "gt".

Ben sorun bu kadar basit değil bir önsezi var, ama eğer, eval () iş yapabilirdi. Tabii ki, o zaman saldırı her türlü için kendinizi açıyoruz.

my infix to postfix example ben bunu göreli kolaylıkla PHP liman olabilir düşünüyorum bir göz atın. O sadece bir dizi ve bazı anahtarları kullanır. Hiçbir ağaçlar. Bir yığın sadece postfix sonucu çalıştırmak için gereklidir.

Bu fonksiyonu kontrol edin: http://pluginphp.com/plug-in31.php

Sen (şimdilik) benim Değerlendirici sınıf (https://github.com/djfm/Evaluator), aritmetik ifadeler yapar adapte deneyebilirsiniz ve çok değişkenleri kullanabilirsiniz. Bütün büyük PHP operatörleri uygulanmaktadır.