TP5 ialah rangka kerja pembangunan berprestasi tinggi berdasarkan PHP, yang digunakan secara meluas dalam pelbagai projek pembangunan web. Bagaimanapun, selepas versi terkini dikeluarkan, sesetengah pengguna menghadapi masalah, iaitu ralat berlaku semasa proses menyokong PHP7.2.15 pada TP5. Artikel ini akan menyelidiki punca masalah ini dan memberikan penyelesaian.
1. Latar belakang masalah
Apabila menggunakan rangka kerja TP5, ramai pengguna telah meningkatkan versi PHP mereka. Antaranya, versi PHP 7.2.15 dianggap sebagai versi yang sangat stabil dan boleh memberikan prestasi dan keselamatan yang lebih baik. Walau bagaimanapun, apabila sesetengah pengguna cuba menggunakan versi PHP 7.2.15 pada TP5, mereka mengalami ralat.
Mesej ralat khusus adalah seperti berikut:
PHP Fatal error: Cannot use isset() on the result of a function call (you can use "null !== func()" instead) in /path/to/tp5/framework/library/think/db/BaseQuery.php on line xxx
2. Punca masalah
Menurut mesej ralat di atas, ia boleh. didapati bahawa masalahnya terletak pada rangka kerja TP5 dalam kod. Khususnya, ralat berlaku dalam BaseQuery.php, pembina pernyataan pertanyaan pangkalan data TP5. Ia boleh dilihat daripada mesej ralat bahawa fungsi isset() digunakan dalam fail BaseQuery.php, dan ini boleh mencetuskan beberapa ciri baharu versi PHP 7.2.15 dan menyebabkan ralat berlaku.
Secara khusus, PHP versi 7.2.15 memperkenalkan ciri baharu yang tidak membenarkan fungsi isset() digunakan secara langsung pada nilai pulangan sesuatu fungsi. Ciri ini dilaksanakan untuk mengelakkan beberapa kemungkinan isu keselamatan dan ralat sintaks. Dalam TP5, situasi menggunakan isset() pada nilai pulangan ini berlaku, yang menyebabkan program ranap.
3. Penyelesaian
Memandangkan masalah di atas, penyelesaian berikut boleh diguna pakai untuk menyelesaikan masalah ini:
Mengikut maklumat yang diberikan oleh forum rasmi TP5, jika masalah di atas berlaku semasa Naik Taraf, adalah disyorkan untuk menaik taraf daripada 5.0.10 kepada versi terkini. Versi terkini TP5 telah membetulkan masalah ini dan boleh menyokong penggunaan PHP 7.2.15.
Selain itu, anda juga boleh mengubah suai kod secara manual untuk menyelesaikan masalah ini. Kaedah pengubahsuaian khusus adalah seperti berikut:
Masukkan fail: tp5/framework/library/think/db/BaseQuery.php
Cari kod berikut:
if(is_null($value)) { $condition .= $field . ' IS NULL '; // null值处理 } elseif(is_array($value)) { if(is_string($key)) { $condition .= $field . ' ' . $key . ' (' . implode(',', $this->parseValue($value)) . ')'; } else { $condition .= $this->buildWhere($value, $field, $type, $logic, $condition); } } elseif(is_string($key)) { $condition .= $field . ' ' . $key . ' ' . $this->parseValue($value); } else { $condition .= $field . ' = ' . $this->parseValue($value); }
Ubah Suai Untuk:
if(is_null($value)) { $condition .= $field . ' IS NULL '; } elseif(is_array($value)) { if(is_string($key)) { if (empty($value)) { $condition .= '1=0'; } else { $condition .= $field . ' ' . $key . ' (' . implode(',', $this->parseValue($value)) . ')'; } } else { $condition .= $this->buildWhere($value, $field, $type, $logic, $condition); } } elseif(is_string($key)) { if ($value === '' || is_array($value)) { $condition .= '1=0'; } else { $condition .= $field . ' ' . $key . ' ' . $this->parseValue($value); } } else { $condition .= $field . ' = ' . $this->parseValue($value); }
Ambil perhatian bahawa jika anda memilih untuk mengubah suai kod secara manual, anda perlu menguji kod yang diubah suai untuk memastikan ketepatannya. Selain itu, untuk mengelakkan masalah pada masa hadapan, adalah idea yang baik untuk memastikan versi rangka kerja TP5 anda dikemas kini.
4 Ringkasan
Melalui analisis artikel ini, kita dapat melihat bahawa laporan ralat yang menyokong PHP7.2.15 tidak datang dari PHP itu sendiri, tetapi muncul dalam Kod rangka kerja TP5. Dalam pembangunan berdasarkan TP5, jika anda menghadapi masalah sedemikian, anda hanya perlu menggunakan penyelesaian di atas. Pada masa yang sama, kita juga perlu sedar bahawa apabila menggunakan versi baharu PHP, keserasian dengan rangka kerja TP5 juga perlu diuji dan dinyahpepijat dengan sewajarnya untuk memastikan kestabilan dan kebolehpercayaan keseluruhan sistem.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat apabila tp5 menggunakan php7.2.15. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!