Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Menilai Ungkapan Matematik dengan Selamat daripada Rentetan dalam PHP?
Menilai Ungkapan Matematik daripada Rentetan Menggunakan Eval
Isu:
Apabila cuba menilai sesuatu ungkapan matematik yang disimpan dalam rentetan menggunakan eval(), "Ralat Parse" berlaku, menunjukkan penghujung input yang tidak dijangka.
Penyelesaian:
Walaupun secara amnya tidak disyorkan untuk menggunakan eval() untuk tujuan ini kerana kebimbangan keselamatan, pengubahsuaian kod berikut diselesaikan isunya:
$ma = "2+10"; $p = eval('return ' . $ma . ';'); print $p;
Dengan mengembalikan hasil secara eksplisit dalam fungsi eval(), kod mengharapkan barisan kod yang lengkap.
Penyelesaian Alternatif:
Penyelesaian yang lebih selamat dan cekap ialah menggunakan tokenizer/penghurai untuk mengendalikan ungkapan matematik. Berikut ialah contoh berasaskan regex mudah:
$ma = "2+10"; if (preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE) { $operator = $matches[2]; switch ($operator) { case '+': $p = $matches[1] + $matches[3]; break; case '-': $p = $matches[1] - $matches[3]; break; case '*': $p = $matches[1] * $matches[3]; break; case '/': $p = $matches[1] / $matches[3]; break; } echo $p; }
Atas ialah kandungan terperinci Bagaimana untuk Menilai Ungkapan Matematik dengan Selamat daripada Rentetan dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!