Dalam pembangunan PHP, kita selalunya perlu menjana beberapa operator secara dinamik berdasarkan input rentetan oleh pengguna Contohnya, apabila komputer menghuraikan input pengguna secara automatik ke dalam pernyataan pertanyaan SQL, pengguna mungkin menggunakan tanda dan tanda kurang daripada dalam syarat pertanyaan , tanda sama dan pengendali lain. Pada masa ini, kita perlu menukar rentetan ini kepada pengendali yang sepadan.
Jadi, bagaimana untuk melaksanakan fungsi ini? Malah, PHP menyediakan kami kaedah mudah: menggunakan pembolehubah pembolehubah dan tatasusunan $_GET untuk melaksanakan pengendali penukaran rentetan.
Pertama sekali, kita perlu tahu bahawa terdapat satu jenis pembolehubah dalam PHP yang dipanggil Pembolehubah Pembolehubah, iaitu nama pembolehubah bagi pembolehubah. Sintaks ialah ${$varname}, dengan $varname ialah nama pembolehubah biasa. Contohnya, contoh berikut:
$name = 'Tom'; // 定义一个普通的变量$name $$name = 'Hello'; // 定义一个可变变量$Tom,其变量名为$name的值,即'Tom' echo $Tom; // 输出'Hello'
Seterusnya, kita boleh menggabungkan tatasusunan $_GET untuk melaksanakan pengendali penukaran rentetan. Tatasusunan $_GET ialah tatasusunan yang digunakan dalam PHP untuk menerima parameter yang diserahkan melalui GET. Sebagai contoh, apabila kita memasukkan: http://www.example.com/test.php?a=b dalam bar alamat, nilai $_GET['a'] ialah b.
Berikut ialah contoh menukar aksara kepada operator:
$operator = $_GET['op']; // 获取用户输入的运算符 $a = 1; $b = 2; $result = null; switch ($operator) { case '+': $result = $a + $b; break; case '-': $result = $a - $b; break; case '*': $result = $a * $b; break; case '/': $result = $a / $b; break; default: // 不支持的运算符 break; } echo $result; // 输出运算结果
Dalam kod di atas, kami mula-mula mentakrifkan pembolehubah $operator untuk menyimpan operator yang dimasukkan oleh pengguna. Seterusnya, kami mentakrifkan dua pembolehubah $a dan $b. Dalam pernyataan suis, kami menggunakan operator yang berbeza untuk mengira keputusan $a dan $b berdasarkan operator yang dimasukkan oleh pengguna, dan menyimpan keputusan dalam pembolehubah $result. Akhirnya, kami mengeluarkan hasil operasi.
Walau bagaimanapun, apabila pengguna memasukkan rentetan '+', '-', '*', '/', kod di atas akan berfungsi seperti biasa. Tetapi jika pengguna memasukkan operator yang benar-benar baru, program akan ralat. Oleh itu, kami memerlukan cara yang lebih umum untuk melaksanakan pengendali penukaran rentetan.
Kita boleh menggunakan operator sebagai nama pembolehubah pembolehubah, dan menggunakan $$ diikuti dengan nama operator untuk melaksanakan operator penukaran rentetan. Dalam pelaksanaan ini, $ $op digunakan sebagai pembolehubah pembolehubah, yang mempunyai empat nilai: '$+$', '$-$', '$*$', '$/$', mengikut pembolehubah ini Untuk nama daripada pembolehubah, kita boleh melaksanakan pengendali penukaran rentetan.
Berikut ialah contoh penggunaan pembolehubah pembolehubah untuk menukar rentetan kepada pengendali:
$op = $_GET['op']; $a = 1; $b = 2; $result = null; $$op = function($a, $b) { return eval("return($a $op $b);"); // 将$op替换为运算符,使用eval执行运算 }; if (isset($$op)) { $function = $$op; // 获得对应的函数 $result = $function($a, $b); // 计算结果 } echo $result; // 输出运算结果
Dalam kod di atas, kami mula-mula mentakrifkan pembolehubah $op untuk menyimpan operator input pengguna. Seterusnya, kami mentakrifkan dua pembolehubah $a dan $b. Pada baris 7, kami mentakrifkan fungsi tanpa nama secara dinamik berdasarkan operator dan menyimpannya dalam pembolehubah boleh ubah $$op. Dalam pernyataan if, jika pembolehubah pembolehubah $$op wujud, kami menggunakan pembolehubah pembolehubah $fungsi untuk memanggil fungsi yang sepadan untuk mengira keputusan, dan menyimpan hasilnya dalam pembolehubah $hasil. Akhirnya, kami mengeluarkan hasil operasi.
Perlu diambil perhatian bahawa pelaksanaan ini mungkin mempunyai beberapa isu keselamatan apabila menggunakan fungsi eval, jadi ia tidak disyorkan untuk digunakan dalam projek formal. Dalam pembangunan sebenar, kita boleh memilih untuk menggunakan operator yang dipratentukan atau menggunakan operator tersuai untuk memproses operator penukaran rentetan.
Atas ialah kandungan terperinci Bagaimana untuk menukar rentetan menjadi operator yang sepadan dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!