PHP 6 geriye dönük uyumlu değildir [kapalı]

5 Cevap php

Okuduğum kadarıyla, PHP 6 php betikleri bir sürü kıracak. Ben kırılabilir ama neden onlar sadece PHP 5 tutmak yok ve sadece PHP sözdizimi dayalı bir farklı dili olarak PHP 6 dememizin nedenleri anlamak? Uzantı belirli bir tercüman aramak için kullanılabilir zaman neden eski scriptler için uyumlu Geriye yapmak için çok sıkı çalışıyoruz - örneğin gibi, neden sadece bir uzantısı ile 6 komut, "P6" php aramadın?

5 Cevap

Basitçe söylemek gerekirse, bir şeyler yapmanın daha iyi bir yolu her zaman vardır. Bu GCC ve Visual Studio yeni sürümleri eski C / C + + kırmak tüm diller için geçerlidir. Başka bir örnek Python 3.x python 2.x kod bir sürü kırdı. Tüm bu amaçla yapıldı. Nedeni programcılar hata yapmak olduğunu ve bir sonraki sürümü herkes için daha iyi bir platform yapmak için fırsat verir ve.

PHP5 var ve Zend PHP6 bu sorunları düzeltmek için çalışıyor bazı ciddi hatalar vardır. Aklımda en sopalarla ciddi bir hata magic_quotes_gpc ve register_globals olduğunu. PHP yanlış çünkü eter programcı tembel olduğu ya da çünkü açıklarına yol olarak bu dil dahil hiç gerekirdi. Magic_quotes_gpc ve register_glboals Hem PHP6 kaldırılır ediliyor ve samimi bir beyaz şapka hacker olarak ben onları gidip görmek için mutluyum. Ancak, uygulama kodu uyumlu ve aynı zamanda sömürü zayıf yapmak için daha sonra olası bu özelliklerinden eter birinde bağlıdır eğer.

Sen php özel bir sürümü ile PHP6 komut arayabilir, ve isterseniz uzatma syf6 kullanabilirsiniz. Bu web sunucusu kurmak nasıl tüm meselesidir.

Sürece senin yüklü php5 ve PHP6 hem sahip olarak, olabilir. Php5'lerin tarafından işletilen php dosyalarını ve. PHP6 tarafından işletilen syf6 dosyaları.

Sen PHP6 ile PHP5 uyumlu yapabilirsiniz. Gelecekteki uyumlu böylece benim projeler için dosyada aşağıda yaptık. Tüm içerik PHP6 geliştirici konferansında okuduktan sonra yerine koymak olmuştur.

File: is_php6.php

<?php

    // This file does the proper handling of functions/etc for compatibility if we are
    // under PHP6

    /*

    ------------------------------------------------------
    PHP6 NOTES
    ------------------------------------------------------


    1. Call Time Pass by Reference
    -------------------------------
    Don't initiate your objects with the reference operator anymore.

    // incorrect
    $var =& new stdObject(); //current object reference
    // correct
    $var = new stdObject(); //just do this instead 


    2. register_long_arrays, HTTP_*_VARS
    -------------------------------------
    Removed and if you are not using $_POST and $_GET, do so!


    3. Case Sensitivity
    -------------------
    Case insensitivity of functions and classes. Use case-sensitive names


    4. ereg
    -------
    ereg removed. use preg instead.


    5. Strings and {}
    -----------------
    Instead of using $somevar{1}, use $somevar[1]


    6. Error Supression @
    ----------------------
    Because @ operator is very slow, it won't work on ini_set eg @ini_set.


    7. break $somevar
    -----------------
    Removed support for dynamic breaks. You can't do this:

        break $somevar;

    You need to find an alternative to that.


    8. Database Extensions/Objects
    ------------------------------
    Use PDO as early as you can (PHP 5.1). Their plan is to slowly move
    Non-PDO database extensions out of the core. It is good idea to migrate
    to those as soon as you can.


    9. ASP Style Tags <% %> and Short Tags
    --------------------------------------
    ASP style tags are no more supported. Also for security reasons, you should
    use full PHP tags eg <?php ?> instead of <?=$somevar?>.


    10. safe_mode
    -------------
    No more there.


    11. var
    ------------
    "var" keyword is now an alias of "public"; not used for variable declaration any more.


    12. Support for Freetype 1 and GD 1
    --------------------------------------
    Support for both of them removed cause they are archaic.


    13. ?: operator
    ----------------
    They drop the middle value for the ?: operator eg:



    */

    if (version_compare(phpversion(), '6', '>='))
    {

        // no more register_globals
        if (ini_get('register_globals'))
        {
            ini_set('register_globals', false);
        }

        // no more magic quotes
        function get_magic_quotes_gpc()
        {
            return false;
        }

        // zend compatibility mode setting
        if (ini_get('zend.ze1_compatibility_mode'))
        {
            ini_set('zend.ze1_compatibility_mode', false);
        }

        // disable magic_quotes_runtime
        if (get_magic_quotes_runtime())
        {
            @set_magic_quotes_runtime(0);
        }

    }

?>

Peki, PHP dosya uzantısı umurumda değil. Muhtemelen farklı bir PHP yorumlayıcı belirli bir uzantısı eşleme için bir web sunucusu kurmak olabilir. Ama sonra ne PHP5'ta içindir senaryo dahil PHP6 senaryo olsaydı?

Ben sadece sunucu başına bir tercüman sopa ve yükseltilmiş ve kodu test ettik bir kez PHP6 sunucuya taşımak için projeler daha kolay olduğunu düşünüyorum.

Karar PHP için değil, örneğin Apache yalnızca dosya uzantısına göre aramak için PHP motoru hangi sürümünü belirlemek için izin verir, o bazen .php3 veya {gibi dosyaları görmek onlar nedeni [(1)] var }.

PHP 6 dışarı geldiğinde muhtemelen vahşi bazı .php5 dosyaları görürsünüz ve .php varsayılan olacaktır.

Ama tersine, PHP 6 hayal ediyorsun kabus değil, merak etmeyin.