Rumah >pembangunan bahagian belakang >tutorial php >PHP Master | 5 Coretan PHP Inspiring (dan Berguna)

PHP Master | 5 Coretan PHP Inspiring (dan Berguna)

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-26 08:41:09296semak imbas

PHP Master | 5 Inspiring (and Useful) PHP Snippets

Internet penuh dengan pelbagai artikel jenis "X PHP Code Snippets", mengapa anda perlu menulis artikel lain? Alasannya adalah mudah: kebanyakan coretan kod dalam artikel itu kurang bersemangat. Menjana rentetan rawak atau kembali

untuk mendapatkan serpihan seperti alamat IP klien sebenarnya tidak menyeronokkan dan praktikal. Artikel ini akan berkongsi lima coretan praktikal dan menarik kod PHP dan memperkenalkan inspirasi di belakangnya. Semoga coretan kod kreatif ini akan memberi inspirasi kepada anda untuk menulis kod yang lebih baik dan lebih kreatif dalam pengaturcaraan harian anda. $_SERVER["REMOTE_ADDR"]

mata utama

    Artikel ini memperkenalkan lima coretan kod PHP praktikal, termasuk menggunakan fungsi terbina dalam
  • untuk menghasilkan data CSV, menggunakan standard PSR-0 untuk memuatkan kelas secara automatik, menggunakan fungsi fputcsv() untuk menghuraikan panjang tetap data, dan menggunakan kelas PHP yang mudah melakukan templat HTML dan gunakan unpack() sebagai alternatif kepada curl untuk mengeluarkan HTTP GET dan permintaan pos. file_get_contents
  • Penulis menekankan pentingnya menggunakan fungsi terbina dalam PHP dan mewujudkan penyelesaian tersuai untuk melaksanakan tugas-tugas yang sama seperti menghasilkan data CSV atau kelas memuat secara automatik, yang dapat meningkatkan kecekapan dan kreativiti pengekodan.
  • Penulis juga membincangkan manfaat dan potensi risiko menggunakan coretan kod PHP, menunjukkan bahawa walaupun mereka dapat meningkatkan produktiviti dan meningkatkan kebolehbacaan kod, mereka harus digunakan dengan berhati -hati, diuji dalam persekitaran yang selamat, dan dari sumber yang dipercayai untuk mengelakkan diri masalah yang berpotensi atau risiko keselamatan.

1 kita sering melihat kod seperti ini, cuba menukar data array multidimensi ke CSV:

Masalahnya ialah setiap elemen tidak melarikan diri dengan betul, dan kemasukan sebut harga atau koma dalam satu nilai boleh menyebabkan kesilapan dalam parsing data CSV berikutnya. Adalah lebih baik untuk menggunakan fungsi terbina dalam

; Kod berikut merangkumi logik membina output CSV dari array data. Ia mengandungi parameter pilihan yang membolehkan penggunaan lajur tajuk, dan sama ada untuk menyegarkan CSV terus ke pelayar atau mengembalikan output sebagai rentetan. Perkara yang bijak mengenainya ialah menggunakan aliran dengan
<code class="language-php"><?php
$csv = "";
foreach ($data as $row) {
    $csv .= join(",", $row) . "\n";
}
echo $csv;
?></code>
, kerana fungsi memerlukan pemegang fail terbuka untuk beroperasi.

fputcsv() fputcsv() dengan fungsi

, menghasilkan CSV menjadi mudah dan boleh dipercayai.
<code class="language-php"><?php
function toCSV(array $data, array $colHeaders = array(), $asString = false) {
    $stream = ($asString)
        ? fopen("php://temp/maxmemory", "w+")
        : fopen("php://output", "w");

    if (!empty($colHeaders)) {
        fputcsv($stream, $colHeaders);
    }

    foreach ($data as $record) {
        fputcsv($stream, $record);
    }

    if ($asString) {
        rewind($stream);
        $returnVal = stream_get_contents($stream);
        fclose($stream);
        return $returnVal;
    } else {
        fclose($stream);
    }
}
?></code>

toCSV() 2

Fail kelas autoload adalah perkara biasa, tetapi anda mungkin tidak menyukai autoloader kelas berat yang ditawarkan oleh pelbagai rangka PHP, atau anda mungkin ingin menulis penyelesaian anda sendiri. Mujurlah, anda boleh menulis loader minimal anda sendiri dan masih mematuhi piawaian PSR-0 yang diterima pakai oleh Kumpulan Kerja Piawaian PHP, yang pertama kali saya tunjukkan di blog saya sendiri. Piawaian ini tidak menerangkan fungsi sokongan (kaedah pendaftaran, pilihan konfigurasi, dan lain-lain) yang mesti disediakan oleh Autoloader PSR-0. Jika ia secara automatik dapat mencari definisi kelas dalam mod <vendor name>(<namespace>)</namespace></vendor>, maka ia serasi PSR-0. Juga, ia tidak menentukan direktori induk <vendor name></vendor>. "Isi" tambahan yang dilaksanakan oleh kebanyakan autoloaders adalah mudah jika anda perlu menentukan lokasi melalui kod, tetapi tidak perlu jika anda hanya menggunakan direktori yang sudah ada di PHP termasuk jalan.

<code class="language-php"><?php
$csv = "";
foreach ($data as $row) {
    $csv .= join(",", $row) . "\n";
}
echo $csv;
?></code>
Perkara yang bijak di sini adalah ungkapan biasa, yang memisahkan nama lulus ke dalam komponennya; Bahagian -bahagian ini mesti dikenal pasti kerana garis bawah tidak mempunyai makna khas di bahagian -bahagian ruang nama, jadi penggantian buta garis bawah dan backslashes tidak betul.

$match[2] $match[1] 3.

Di dunia moden hari ini dipenuhi dengan XML dan JSON, anda mungkin berfikir bahawa format panjang tetap telah pupus ... tetapi anda salah. Masih terdapat sejumlah besar data tetap, seperti penyertaan log tertentu, Marc 21 (Maklumat Bibliografi), NACHA (Maklumat Kewangan), dan lain-lain. Sejujurnya, saya masih mempunyai keinginan istimewa untuk data tetap.

Dalam bahasa seperti C, data tetap panjang agak mudah diproses kerana sekali dimuatkan ke dalam ingatan, ia akan diselaraskan dengan sempurna dengan struktur data akses. Tetapi bagi sesetengah orang, memproses data panjang tetap dalam bahasa dinamik seperti PHP boleh menjadi perjuangan; Oleh itu, kita sering melihat kod seperti ini:

anda mungkin merasa tidak selesa. Tidak mengapa, saya tidak mahu menggunakan kod seperti ini dalam aplikasi saya sama ada! Ia panjang dan indeks terdedah kepada kesilapan. Nasib baik, terdapat alternatif yang lebih baik:

.

Dokumentasi dalam
<code class="language-php"><?php
function toCSV(array $data, array $colHeaders = array(), $asString = false) {
    $stream = ($asString)
        ? fopen("php://temp/maxmemory", "w+")
        : fopen("php://output", "w");

    if (!empty($colHeaders)) {
        fputcsv($stream, $colHeaders);
    }

    foreach ($data as $record) {
        fputcsv($stream, $record);
    }

    if ($asString) {
        rewind($stream);
        $returnVal = stream_get_contents($stream);
        fclose($stream);
        return $returnVal;
    } else {
        fclose($stream);
    }
}
?></code>
dalam manual PHP menyatakan: "Membongkar rentetan binari ke dalam tatasusunan mengikut format yang diberikan" dan menunjukkan contoh penggunaan menggunakan data binari melarikan diri. Apa yang mungkin tidak jelas ialah kerana penentu format "A" bermaksud aksara (selepas semua, rentetan bukan sekadar satu siri bit dan bait?), Fungsi ini boleh digunakan untuk menghuraikan rentetan panjang tetap.

unpack() Menggunakan

, contoh di atas boleh ditulis semula dengan lebih anggun seperti berikut:

unpack()

Dalam kes ini, rentetan format hanya satu siri, menentukan data aksara, bilangan aksara dalam medan tertentu, dan data yang diambil akan diberikan dalam array akhir, dipisahkan oleh slashes. Sebagai contoh,

akan menghuraikan 6 aksara dan memberikannya sebagai unpack().

<code class="language-php"><?php
spl_autoload_register(function ($classname) {
    $classname = ltrim($classname, "\");
    preg_match('/^(.+)?([^\]+)$/U', $classname, $match);
    $classname = str_replace("\", "/", $match[1])
        . str_replace(["\", "_"], "/", $match[2])
        . ".php";
    include_once $classname;
});
?></code>

4

Dalam komuniti PHP, belum ada banyak persetujuan mengenai templateisasi. Kita semua bersetuju bahawa adalah wajar untuk memisahkan HTML dan PHP, tetapi terdapat konflik atas kebolehgunaan menggunakan perpustakaan templat seperti Smarty atau Twig. Sesetengah orang menunjukkan bahawa PHP sendiri adalah enjin templat dan menentang kelajuan, sintaks, dan lain -lain dari perpustakaan. Orang lain mendakwa mendapat manfaat daripada menggunakan DSL yang disediakan oleh sistem templat. Satu tradeoff adalah untuk templat HTML anda dengan kelas yang sangat kecil yang ditulis dalam PHP untuk memastikan kod anda ringkas.

<code class="language-php"><?php
$csv = "";
foreach ($data as $row) {
    $csv .= join(",", $row) . "\n";
}
echo $csv;
?></code>

Ia bukan enjin templat yang matang; Pertama, anda membuat contoh kelas Template dalam pandangan, dan anda boleh memilih untuk lulus nama direktori untuk mencari fail templat berikutnya (membolehkan anda untuk mengumpulkan fail yang berkaitan). Kemudian, nilai yang perlu diisi dengan templat diberikan kepada kaedah set() atau sebagai atribut telanjang. Sebaik sahaja semua nilai ditentukan, anda boleh memanggil kaedah out() untuk menjadikan templat.

<code class="language-php"><?php
function toCSV(array $data, array $colHeaders = array(), $asString = false) {
    $stream = ($asString)
        ? fopen("php://temp/maxmemory", "w+")
        : fopen("php://output", "w");

    if (!empty($colHeaders)) {
        fputcsv($stream, $colHeaders);
    }

    foreach ($data as $record) {
        fputcsv($stream, $record);
    }

    if ($asString) {
        rewind($stream);
        $returnVal = stream_get_contents($stream);
        fclose($stream);
        return $returnVal;
    } else {
        fclose($stream);
    }
}
?></code>
Fail

contoh mytemplate.php mungkin kelihatan seperti ini:

<code class="language-php"><?php
spl_autoload_register(function ($classname) {
    $classname = ltrim($classname, "\");
    preg_match('/^(.+)?([^\]+)$/U', $classname, $match);
    $classname = str_replace("\", "/", $match[1])
        . str_replace(["\", "_"], "/", $match[2])
        . ".php";
    include_once $classname;
});
?></code>

Dalam fail templat, anda boleh mengakses pelbagai fungsi PHP untuk memformat nilai, nilai penapis, dan lain -lain seperti yang diperlukan.

Parameter pilihan kedua

out() boleh menentukan bahawa kandungan templat dikembalikan sebagai rentetan dan bukannya menyegarkannya terus ke penyemak imbas, anda boleh menggunakannya untuk menggantikan hasil templat yang telah diisi sebelumnya.

5. Curl adalah perpustakaan yang kuat untuk berkomunikasi melalui pelbagai protokol. Ia sangat kuat dan kadang -kadang tidak ada cara lain untuk melakukannya. Jika anda secara jelas memerlukan fungsi yang terdedah oleh curl untuk menyelesaikan tugas anda, kemudian gunakan curl! Walau bagaimanapun, kebanyakan penggunaan curl harian dalam PHP berkisar membuat HTTP mendapatkan dan permintaan pos, yang boleh dilakukan dengan mudah menggunakan fungsi terbina dalam PHP.

Terdapat dua isu dengan bergantung kepada curl untuk mengeluarkan permintaan HTTP: 1) Selalunya banyak pilihan untuk disediakan walaupun untuk urus niaga yang paling mudah, dan 2) ia adalah lanjutan yang bergantung pada hosting dan pemasangan anda, mungkin juga boleh didapati.

dan

adalah dua fungsi PHP asli yang telah tersedia sejak versi 4.3. Bersempena, mereka boleh melakukan banyak permintaan jenis yang sama seperti curl biasanya dilakukan. file_get_contents() stream_context_create() untuk mendapatkan permintaan asas, anda boleh menggunakan

itu sendiri:

file_get_contents()

Untuk permintaan yang memerlukan menentukan tajuk HTTP (sama ada mendapatkan atau kaedah HTTP yang lain), anda boleh membuat konteks dengan meluluskan array khas khas untuk
<code class="language-php"><?php
// 解析NACHA报头记录
$row = fread($fp, 94);
$header = array();
$header["type"] = substr($row, 0, 1);
$header["priority"] = substr($row, 1, 2);
$header["immDest"] = substr($row, 3, 10);
$header["immOrigin"] = substr($row, 13, 10);
$header["date"] = substr($row, 23, 6);
$header["time"] = substr($row, 29, 4);
$header["sequence"] = substr($row, 33, 1);
$header["size"] = substr($row, 34, 3);
$header["blockFactor"] = substr($row, 37, 2);
$header["format"] = substr($row, 39, 1);
$header["destName"] = substr($row, 40, 23);
$header["originName"] = substr($row, 63, 23);
$header["reference"] = substr($row, 86, 8);
print_r($header);
?></code>
dan kemudian lulus konteks ke

. stream_context_create() file_get_contents()

Contoh di atas menunjukkan huruf yang diperlukan untuk memuat naik fail melalui pos, array konteks menggunakan kaedah "Kunci", "Header", dan "Kandungan" untuk menentukan transaksi
<code class="language-php"><?php
// 解析NACHA报头记录
$row = fread($fp, 94);
$header = unpack("A1type/A2priority/A10immDest/A10immOrigin/"
    . "A6date/A4time/A1sequence/A3size/A2blockFactor/A1format/"
    . "A23destName/A23originName/A8reference", $row);
print_r($header);
?></code>

口.

Apabila menggunakan file_get_contents() untuk permintaan kompleks (seperti muat naik fail), mula -mula membuat borang web mock dan jalankan melalui Firefox atau alat yang serupa dengan Firebug didayakan, kemudian periksa apa yang dimasukkan dalam permintaan mungkin sedikit bantuan. Dari situ, anda boleh menyimpulkan elemen header penting untuk dimasukkan.

Ringkasan

Saya harap anda dapati coretan kod yang diperkenalkan dalam artikel ini menarik. Mereka mempamerkan penyelesaian masalah kreatif dan menggunakan keupayaan terbina dalam PHP untuk kesan baru. Saya harap anda dapati mereka berguna dan memberi inspirasi. Jika anda mempunyai coretan kod inspirasi anda sendiri, jangan ragu untuk berkongsi di komen di bawah.

(gambar dari fotolia)

(Soalan Lazim Mengenai Coretan Kod PHP)

(bahagian FAQ ditinggalkan di sini kerana kandungan bahagian FAQ asal tidak ada kaitan dengan coretan kod itu sendiri, dan merupakan penerangan tambahan. Anda boleh menambah atau mengubahnya sendiri mengikut keperluan sebenar.)

Atas ialah kandungan terperinci PHP Master | 5 Coretan PHP Inspiring (dan Berguna). 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