Deskripsi Proyek
# PHP ke PYTHON
Skrip python untuk mengubah kode php sederhana menjadi python,
Itu hanya mengubah sintaks dasar
Itu yang saya gunakan dalam konversi mpg25/Instagram-API di PHP ke danleyb2/Instagram-API di PYTHON
## penggunaan
```
$python php2python. py -h
penggunaan. php2python. py [-h] -s SCRIPT [-o]
Konverter sintaks PHP ke PYTHON
argumen opsional
-h, --help tampilkan pesan bantuan ini dan keluar
-s SCRIPT, --script SCRIPT
Jalan ke skrip PHP
-o, --overwrite Timpa skrip Python jika ada
```
```
$python php2python. py -s test_scripts/Caption. php
Konversi. test_scripts/Keterangan. php. File keluaran akan menjadi. test_scripts/Keterangan. py
# Hapus pembukaan dan penutupan # ubah $this-> menjadi self
# mengubah. ke
# Hapus semua }
# hapus namespace. membutuhkan_sekali. sertakan_sekali
# ubah $var terproteksi menjadi diri sendiri. var = Tidak ada lalu pindah ke __init__
# konversi publik. fungsi yang dilindungi ke def
# tambahkan `self` ke tanda tangan fungsi
# kelas bukan turunan untuk memperluas `objek`
# ubah $ menjadi ''
# mengubah ;
# ubah baru menjadi ''
Dikonversi. test_scripts/Keterangan. php. ke. test_scripts/Keterangan. py. { Ayo, Periksa Bukti. ) }
```
```
$python php2python. py -s test_scripts/Caption. php
Maaf, Skrip python test_scripts/Caption. py sudah ada, gunakan -o untuk menimpa
```
Ini dimaksudkan sebagai bantuan porting saja. Anda masih perlu meninjau PHP yang dihasilkan dan melakukan penyesuaian. Tapi itu menangani banyak pekerjaan kasar dan kasus umum
py2php adalah salinan pyjs yang banyak dimodifikasi. py dari proyek piyama. pyjs. py ditulis untuk menerjemahkan python ke javascript. py2php mengubah semantik keluaran dari JS ke php
ContohBerikut adalah program python sederhana untuk menghasilkan urutan angka fibonacci
def gen_fib(count): i = 1 if count == 0: fib = [] elif count == 1: fib = [1] elif count == 2: fib = [1,1] elif count > 2: fib = [1,1] while i < (count - 1): fib.append(fib[i] + fib[i-1]) i += 1 return fib print gen_fib(10)
dan inilah PHP yang dibuat secara otomatis
<?php require_once('py2phplib.php'); function gen_fib($count) { $i = 1; if (($count == 0)) { $fib = array(); } else if (($count == 1)) { $fib = array(1); } else if (($count == 2)) { $fib = array(1, 1); } else if (($count > 2)) { $fib = array(1, 1); while (($i < ($count - 1))) { $fib[] = ($fib[$i] + $fib[($i - 1)]); $i += 1; } } return $fib; } pyjslib_printFunc(gen_fib(10));_
Keduanya menghasilkan output yang sama persis
$ python fibonacci.py [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
$ php fibonacci.py.php [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
File py2phplib. php berisi beberapa fungsi PHP yang meniru kata kunci python seperti print, range, dll. py2php secara otomatis mengganti nama kata kunci ini untuk memanggil fungsi yang ditiru
Lihat di direktori tes untuk lebih banyak contoh
translate_python_to_phptranslate_python_to_php adalah skrip pembungkus untuk py2php. Jalankan di direktori mana pun tanpa argumen dan itu akan mencoba menerjemahkan semua. file py ke dalam. file php
Jalankan dengan satu atau lebih argumen, dan itu akan mencoba menerjemahkan file dalam daftar argumen
Penggabungan StringPython menggunakan + untuk penggabungan string dan PHP menggunakan dot (. )
Karena variabel python diketik secara dinamis, py2php tidak mungkin mengetahui apakah variabel yang diberikan mewakili string atau angka
py2php mencoba menangani ini dengan
Jika salah satu sisi ekspresi adalah konstanta string, maka gunakan operator titik
Jika salah satu sisi ekspresi adalah variabel yang berisi "str" atau "buf" pada namanya, maka gunakan operator dot
Untuk semua kasus lainnya, gunakan operator plus
Ini berarti bahwa jika nama variabel string Anda tidak mengandung "str" atau "buf" maka Anda perlu mengubah secara manual semua kejadian terkait "+" menjadi ". "
Konvensi PemindahanSaat mem-porting kode python, saya secara manual membuat subdirektori bernama _autotranslated, tempat saya memindahkan semua yang asli. file py. Saya kemudian menjalankan translate_python_to_php yang membuat semua terjemahan. file php. Saya kemudian menyalin (tidak bergerak. ) file yang dihasilkan tersebut kembali ke direktori induk untuk ditinjau dan disesuaikan, untuk menyelesaikan port
Dengan cara ini, direktori _autotranslated hanya berisi yang asli. py file dan autogenerated. file php. Ini akan membuat segalanya lebih mudah di masa depan ketika proyek python upstream merilis versi baru. Maka kami hanya akan menyalin yang baru. py ke direktori tmp baru, jalankan kembali autotranslater, dan kemudian kita memiliki PHP PHP diff yang bagus yang dapat kita gunakan sebagai bantuan porting. Setelah port selesai, file direktori tmp harus menggantikan konten direktori _autotranslated