Bahasa PHP dengan .NET Core

Soeleman 26 Juni 2018

Bahasa PHP dengan  .NET Core

Kalau pernah membaca tulisan tentang PeachPie di CodePolitan. Tentu jadi penasaran ingin mencoba ini.

Dalam kesempatan ini, kita akan mencoba melihat bagaimana membuat pengaturan agar PeachPie ini bisa menjalankan PHP kode dalam .NET Core.

Template

Walaupun ini bukan mandatory, tapi menggunakan template project akan mempercepat kita untuk bekerja dengan PHP dalam .NET Core. Karena kita perlu membuat pengaturan agar kompiler dapat bekerja.

Memasang template di .NET Core cukup kita tahu namanya. Dengan perintah dotnet new -i Peachpie.Templates::* maka berkas template itu akan diambil lewat NuGet dan dipasang. Peachpie.Templates merupakan nama package-nya dan ::* sebagai penanda bahwa ambil semua package yang ada.

alt text

Untuk memastikan bahwa template itu sudah terpasang. Kita bisa menggunakan perintah dotnet new -l untuk melihat daftar template project yang ada.

Untuk PHP dari PeachPie, kita mendapatkan dua tipe projek (Console dan Web).

alt text

Projek

Membuat projek baru untuk PHP ini, kita akan menggunakan yang templates web dengan menggunakan perintah dotnet new web -lang PHP -n CodePolitan. Perintah ini akan menggunakan Short Name dari Templates web dengan bahasa PHP (pakai parameter -lang) dengan nama project CodePolitan.

Templates ini akan membuatkan dua folder yang berisi projek CSharp (C#) dan PHP. C# ini akan bertindak host dari aplikasi, karena ia akan menjalankan ASP.NET. Sedangkan _folder website berisi berkas-berkas code PHP, yang akan di-transpile oleh PeachPie menjadi C# kemudian dikompile. Hasil kompilenya akan di-reference ke project ASP.NET tadi.

alt text

Biar lebih mudah, kita akan gunakan Visual Studio Code (VSCode).

Setelah berhasil membuat projek baru. Kita masuk ke folder CodePolitan dan untuk membuat dengan VSCode, cukup gunakan perintah code . .

Secara automatis, VSCode akan mendeteksi adanya berkas .sln. Dan akan menawarkan untuk membuat konfigurasi untuk debug.

Juga akan ditawarkan untuk men-restore dalam artian mengambil package NuGet seperti yang ada dalam file *proj.

alt text

Bila kita tekan tombol Yes dan Restore, kita akan medapatkan folder .vscode dan terbuka panel Output yang berisi informasi tentang proses restore-nya.

alt text

Bila tidak ada masalah, kita bisa melihat proof-of-concepts dari projek PeachPie.

Untuk menjalankan ini, kita bisa gunakan fasilitas debug VSCode atau kita cukup beri perintah dotnet run -p Server. Kalau kita berada dalam folder Server, kita tidak perlu spesifik memberitahu projek mana yang akan dijadikan host.

Seperti yang kita lihat, berkas PHP yang ada dapat bekerja seperti layaknya ASP.NET.

alt text

PeachPie sendiri belum realese masih dalam taraf development. Banyak yang belum di-map kedalam library helper yang akan membantu terutama library PHP tersebut merupakan wrapper dari native function.

Oleh karena itu, ini masih belum cukup nyaman digunakan. Masih butuh trik dan tip untuk membuat bekerja sebagaimana layaknya ketika dengan PHP sendiri.

Contohnya untuk PeachPie-WordPress dan PeachPie-MediaWiki, kalau kita lihat banyak yang perlu diatur pada *proj. Dan itu perlu pengetahun yang dalam terhadap PeachPie agar bisa bekerja seperti yang diharapkan.

Walaupun masih banyak library yang belum sempurna, secara runtime PHP sudah bisa memanfaatkan ASP.NET secara efektif. Seperti pada tes di TechEmpower, cukup menjanjikan masalah performanya.

alt text

Penutup

PeachPie memang tidak mengkompile ke-ByteCode kode PHP, tapi ia meng-transpile menjadi C# kode baru C# kompiler mengkompilenya. Jadi yang diambil hanya 'bahasa' PHP saja, bukan secara keseluruhan.

Walaupun begitu dengan bantuan PeachPie ini, PHP kode bisa memanfaatkan keefisienan .NET Core dalam mengesekusi ByteCode. Dan sebagai projek yang awalnya projek sebuah universitas saja, dapat memberikan pilihan bekerja dalam .NET Core lewat PHP.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.