Walaupun dalam mod yang ketat, anda tidak perlu memberi penjelasan semua pembolehubah. Itu kerana Hack cukup pintar untuk menyimpulkan jenis pembolehubah tempatan. Anotasi jenis hanya diperlukan untuk sifat kelas, hujah fungsi dan nilai pulangan. Saya sebaliknya akan mengesyorkan untuk memberi penjelasan pembolehubah tempatan apabila ia dapat membantu pemahaman kod anda.
mari kita lihat contoh:
Kod sampel untuk bahagian ini terletak di www/jenis-checker/index.php dan anda dapat melihat outputnya dengan menunjuk penyemak imbas anda ke http: // localhost: 8080/type-checker/.
Mesej ralat pertama tidak menghairankan: panggilan tambah (1, "a") menghasilkan ralat kerana menambah () mengharapkan hujah kedua menjadi integer.
Mesej ralat kedua lebih tidak dijangka: ralat tidak dihasilkan dengan memanggil add_array ([1, "a"]). Ia sebenarnya panggilan untuk menambah (1, "a") di dalam add_array () yang menghasilkan kesilapan! Seseorang boleh menjangkakan bahawa lulus [1, "a"] akan mencetuskan kesilapan kerana ia bukan array .
Perkara itu adalah bahawa pemeriksaan runtime HHVM adalah jarang agar tidak memberi kesan kepada prestasi: ia tidak melelehkan objek. Pada ketika ini, anda mungkin akan mempersoalkan kegunaan sistem jenis hack! Tetapi jangan risau, ada jawapan yang mudah, "jenis pemeriksa": ia akan menangkap apa -apa jenis ketidakcocokan termasuk yang dari contoh sebelumnya. Jangan cari dalam repositori HHVM, ia belum dikeluarkan oleh Facebook.
Pemeriksa jenis dilaksanakan sebagai pelayan yang menonton fail anda untuk perubahan. Setiap kali ia mengesan perubahan, ia akan mengimbas fail yang diubahsuai bersama -sama dengan kebergantungannya untuk kesilapan. Kesilapan dilaporkan masa nyata supaya anda tidak perlu menjalankan kod tersebut. Ia telah direka untuk bekerja dengan cepat walaupun pada skala FB.
Anda kini harus yakin bahawa sistem jenis berfungsi hebat, tetapi apakah manfaatnya? Ia membolehkan menangkap kesilapan pemaju dalam masa nyata, menghasilkan kod yang lebih efisien: fungsi php add () terlebih dahulu perlu menyemak jenis $ a dan $ b (iaitu rentetan, null, ...) mungkin menukarnya ke nombor dan hanya kemudian Lakukan tambahan. Sedangkan dengan hack fungsi tambah () di atas menambah dua bilangan bulat bukan null yang merupakan operasi yang sangat cepat dalam bahasa pemasangan (seperti yang dihasilkan oleh HHVM JIT).
Jika sebagai pemaju, anda sudah menggunakan anotasi jenis PHP dan anotasi PHPDOC, beralih ke mod yang ketat harus menjadi tidak ada yang lebih baik. Kod anda akan menjadi lebih selamat dan lebih cepat-ambil perhatian bahawa beberapa alat QA yang sedia ada, seperti Scrutinizer sudah menggunakan kesimpulan jenis untuk memeriksa kod anda, walaupun mereka tidak masa nyata.
Jika anda menggunakan PHP kebanyakannya kerana sifatnya yang dinamik, maka anda mungkin mahu berpegang pada mod bukan tegas.
Atribut Pengguna
Penggunaan anotasi telah meningkat secara dramatik di dunia PHP pada tahun -tahun terakhir. Bagi mereka yang tidak biasa dengan anotasi, mereka adalah metadata yang boleh ditambah kepada kelas, antara muka, sifat, pembolehubah dan fungsi/kaedah.
Doktrin ORM mungkin merupakan salah satu projek PHP yang pertama untuk menggunakan anotasi yang luas. Berikut adalah contoh konfigurasi model dari dokumentasi doktrin:
<span><span><?hh // strict
</span></span><span>
</span><span><span>require "/vagrant/www/xhp/php-lib/init.php";
</span></span><span>
</span><span><span>// ...
</span></span><span>
</span><span><span>function add(int $a, int $b): int {
</span></span><span> <span>return $a + $b;
</span></span><span><span>}
</span></span><span>
</span><span><span>// ERROR(calling "add()" on l.17) : Argument 2 passed to add() must be an
</span></span><span><span>// instance of int, string given
</span></span><span><span>echo <p>add(1, "a") = {add(1, "a")}</p>;
</span></span><span>
</span><span><span>// ERROR(calling "add()" on l.22) : Argument 2 passed to add() must be an
</span></span><span><span>// instance of int, string given
</span></span><span><span>function add_array(array<int> $a): int {
</span></span><span> <span>return array_reduce($a, "add", 0);
</span></span><span><span>}
</span></span><span>
</span><span><span>echo <p>add_array([1, "a"]) = {add_array([1, "a"])}</p>;</span></span>
php, tidak seperti banyak bahasa lain, tidak mempunyai sokongan terbina dalam anotasi. Walau bagaimanapun, perpustakaan anotasi doktrin digunakan secara meluas untuk mengekstrak metadata dari docblocks. RFC yang mencadangkan sokongan terbina dalam anotasi dalam PHP telah ditolak pada tahun 2011.
Atribut pengguna ialah pelaksanaan anotasi Facebook. Mereka tertutup dalam > dan sintaks mereka berbeza sedikit dari anotasi doktrin:
<span><span><?hh // strict
</span></span><span>
</span><span><span>require "/vagrant/www/xhp/php-lib/init.php";
</span></span><span>
</span><span><span>// ...
</span></span><span>
</span><span><span>function add(int $a, int $b): int {
</span></span><span> <span>return $a + $b;
</span></span><span><span>}
</span></span><span>
</span><span><span>// ERROR(calling "add()" on l.17) : Argument 2 passed to add() must be an
</span></span><span><span>// instance of int, string given
</span></span><span><span>echo <p>add(1, "a") = {add(1, "a")}</p>;
</span></span><span>
</span><span><span>// ERROR(calling "add()" on l.22) : Argument 2 passed to add() must be an
</span></span><span><span>// instance of int, string given
</span></span><span><span>function add_array(array<int> $a): int {
</span></span><span> <span>return array_reduce($a, "add", 0);
</span></span><span><span>}
</span></span><span>
</span><span><span>echo <p>add_array([1, "a"]) = {add_array([1, "a"])}</p>;</span></span>
Anda harus perhatikan bahawa atribut pengguna, tidak mengejutkan, diakses dari API Refleksi. Juga ambil perhatian bahawa sokongan untuk anotasi pada sifat kelas masih akan dilaksanakan.
Kod sampel untuk bahagian ini terletak di www/atribut/index.php dan anda dapat melihat outputnya dengan menunjuk penyemak imbas anda ke http: // localhost: 8080/atribut/.
xhp
Sekarang anda harus mempunyai foretaste apa yang XHP adalah seperti yang kita telah menggunakannya dari contoh kod pertama artikel ini. Biarkan saya memetik Facebook untuk definisi yang lebih lengkap "XHP adalah lanjutan PHP yang menambah sintaks bahasa supaya serpihan dokumen XML menjadi ungkapan PHP yang sah.". Perhatikan bahawa XHP boleh didapati sebagai lanjutan PHP dan HHVM mempunyai sokongan asli.
dengan XHP, anda boleh menggunakan
{$ hello}
di mana anda akan menggunakan " $ hello
" dengan vanila php. Walaupun contoh sebelumnya adalah remeh, XHP mempunyai lebih banyak tawaran:
- Ia akan mengesahkan markup anda supaya anda tidak boleh menulis HTML tidak sah - fikir tag penutup yang hilang, typos dalam nama parameter, ...
- Ia menyediakan beberapa tahap melarikan diri kontekstual - kerana enjin menyedari apa yang anda rendering, ia dapat melepaskan nilai HTML dan atribut dengan sewajarnya untuk mencegah serangan XSS,
- anda boleh menulis tag anda sendiri dengan memperluaskan atau membungkus tag sedia ada.
mari kita lihat contoh:
<span><span><?php
</span></span><span><span>/** @Entity */
</span></span><span><span>class Message
</span></span><span><span>{
</span></span><span> <span>/** @Column(type="integer") */
</span></span><span> <span>private $id;
</span></span><span> <span>/** @Column(length=140) */
</span></span><span> <span>private $text;
</span></span><span> <span>/** @Column(type="datetime", name="posted_at") */
</span></span><span> <span>private $postedAt;
</span></span><span><span>}</span></span>
kod sampel penuh untuk bahagian ini terletak di www/hhxhp/index.php dan anda dapat melihat outputnya dengan menunjuk penyemak imbas anda ke http: // localhost: 8080/hhxhp/.
Dalam contoh ini, kita mulakan dengan menentukan tag adat yang akan menjadikan tag , ini dilakukan dengan mengisytiharkan kelas: TUTO: Contoh. Tag tersuai kami memerlukan dua atribut, contoh dan semasa tetapi tidak dibenarkan untuk mempunyai anak (kanak -kanak kosong;).
Semasa kami memperluaskan asas: x: elemen, kita harus mengatasi kaedah render () untuk mengembalikan markup adat kami sebagai XHP.
Facebook menggunakan bahasa XHP sebagai asas untuk perpustakaan UI yang akhirnya dapat dibuka juga.
pelaksanaan kod asynchronous
Saya mempunyai rancangan untuk menulis seksyen mengenai pelaksanaan kod tak segerak setelah melihat beberapa ujian dalam repo HHVM. Walau bagaimanapun saya tidak dapat datang dengan contoh kerja. Ia mungkin disebabkan oleh pemahaman saya tentang topik atau hakikat bahawa Facebook belum mengeluarkan semua kod yang berkaitan. Saya mungkin menulis tentang ini sekali Facebook mengeluarkan beberapa dokumentasi.
Ciri -ciri lain
Terdapat banyak perkara mengenai ekosistem HHVM yang tidak dilindungi oleh artikel ini, kerana saya terpaksa membuat pilihan mengenai apa yang perlu disertakan dan kerana Facebook belum mengeluarkan semua kod dan dokumentasi lagi.
Beberapa perkara yang patut disebutkan adalah sokongan baru -baru ini untuk FastCGI dan debugger bersepadu.
Facebook juga mempamerkan "FBIDE", IDE berasaskan web yang memaparkan kesempurnaan auto, penonjolan sintaks, pengeditan kolaboratif dan banyak lagi. Kita boleh mengharapkan ia tersedia pada masa akan datang.
Ressources External
Anda boleh mendapatkan lebih banyak maklumat dalam beberapa ceramah dan slaid dari pasukan Facebook yang saya gunakan untuk menyediakan artikel ini. Saya pertama kali mendengar Hack dengan mendengar ceramah "mengambil php serius" dari Keith Adams dan satu lagi ceramah hebat dari Julien Verlaguet. Slaid Nice Sara Golemon juga sangat membantu saya.
Kesimpulan
Facebook komited untuk menyediakan pariti ciri dengan PHP untuk HHVM. Menjelang akhir tahun lepas, HHVM sudah dapat lulus 98.5% ujian unit untuk 20 kerangka PHP yang paling popular. Keadaan ini sedikit bertambah baik sejak itu.
Sehingga hari ini HHVM melaksanakan kod PHP lebih cepat daripada PHP sambil memakan memori yang kurang. Ini akan menjadi kelebihan yang besar memihak kepada HHVM apabila pariti akhirnya dicapai. Di samping itu, anda boleh mula memperkenalkan hack untuk mendapatkan lebih banyak prestasi dan meningkatkan keselamatan kod dengan bantuan pemeriksa jenis - ingat anda tidak perlu menukar asas kod keseluruhan anda sekaligus terima kasih kepada menaip secara beransur -ansur dan fakta bahawa hack dan PHP adalah antara yang boleh dikendalikan.
Dalam beberapa bulan dari sekarang, kita boleh mengharapkan lebih banyak dokumentasi dan perkakas dari Facebook. Anda juga boleh membantu dengan menyumbang kepada projek di GitHub, terdapat juga program karunia.
Salah satu masalah yang dilaporkan oleh komuniti PHP yang mungkin merupakan halangan utama untuk diterima pakai adalah kekurangan sokongan untuk sambungan PECL. Untuk mengurangkan ini, Facebook mempunyai alat yang secara automatik dapat menyusun sambungan PHP untuk sasaran HHVM; Kadar kejayaan jauh dari 100% walaupun. Perkara lain yang boleh membantu di sini ialah membangunkan lanjutan untuk HHVM adalah lebih mudah daripada membangun untuk php.
Hakikat bahawa HHVM disokong oleh Facebook sahaja, dan keperluan untuk menandatangani CLA sebelum menyumbang kepada HHVM kelihatan menyusahkan orang lain.
Saya secara peribadi berfikir bahawa jumlah persaingan yang saksama adalah perkara yang hebat untuk masa depan php.
untuk membuat kesimpulan, saya ingin mengucapkan terima kasih kepada pasukan Facebook untuk kerja yang luar biasa yang telah mereka lakukan dan mempunyai sumber terbuka. Sekiranya anda ingin melihat lebih banyak artikel SitePoint mengenai HHVM dan Hack pada masa akan datang jangan ragu untuk mencadangkan topik dengan menambahkan komen di bawah.
Soalan Lazim (Soalan Lazim) Mengenai Hack PHP Penggantian HHVM
Apakah penggantian php hack hhvm?
Hack PHP penggantian HHVM, juga dikenali sebagai Hiphop Virtual Machine, adalah mesin maya sumber terbuka yang direka untuk melaksanakan program yang ditulis dalam hack dan php. HHVM menggunakan pendekatan kompilasi tepat masa (JIT) untuk mencapai prestasi unggul sambil mengekalkan fleksibiliti pembangunan yang disediakan oleh PHP.
Bagaimanakah HHVM berbeza daripada php tradisional? Walaupun PHP menafsirkan kod semasa runtime, HHVM menyusun PHP atau kod hack ke bytecode peringkat tinggi yang kemudian diterjemahkan ke dalam kod mesin. Proses ini membolehkan prestasi dan kecekapan yang lebih baik.
Apakah bahasa pengaturcaraan hack? Ia adalah dialek PHP dan termasuk ciri -ciri baru seperti menaip statik, anotasi jenis, dan generik, yang tidak terdapat dalam php tradisional. Beberapa ciri yang bertambah baik pada PHP. Ia termasuk menaip statik, yang boleh menghalang kesilapan runtime yang berpotensi. Ia juga menyokong pengaturcaraan asynchronous, yang membolehkan pengendalian operasi I/O yang lebih cekap. Di samping itu, Hack termasuk koleksi, yang berprestasi tinggi, struktur data yang sangat ditaip. Mungkin beberapa perbezaan disebabkan sifat proses penyusunan JIT. Walau bagaimanapun, HHVM menyediakan alat yang disebut 'HHVM-Autoload' yang dapat membantu dalam memindahkan kod PHP sedia ada ke HHVM. -Time (JIT) pendekatan kompilasi. Ini bermakna bahawa bukannya mentafsirkan kod PHP semasa runtime, HHVM menyusun kod tersebut ke dalam bytecode peringkat tinggi yang kemudian diterjemahkan ke dalam kod mesin. Proses ini membolehkan pelaksanaan yang lebih cepat dan kecekapan yang lebih baik. Oleh itu, untuk menggunakan Hack, anda perlu memasang HHVM. Ini bermakna bahawa jenis pembolehubah diperiksa pada masa penyusunan, yang dapat membantu mencegah kesilapan runtime yang berpotensi. , termasuk menaip statik, pengaturcaraan asynchronous, dan koleksi. Ciri -ciri ini dapat membantu meningkatkan keselamatan kod, kecekapan, dan prestasi.
Bagaimana saya boleh mula menggunakan HHVM dan Hack? Setelah dipasang, anda boleh menulis kod anda dalam hack dan jalankan menggunakan runtime HHVM. Terdapat juga beberapa sumber dan tutorial yang tersedia dalam talian untuk membantu anda memulakan.