Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menyelesaikan ralat apabila tp5 menggunakan php7.2.15

Bagaimana untuk menyelesaikan ralat apabila tp5 menggunakan php7.2.15

PHPz
PHPzasal
2023-03-23 15:51:281630semak imbas

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:

  1. Naik taraf Versi TP5

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.

  1. Ubah suai kod secara manual

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn