Eski PHP4 için PHP Framework desteği?

3 Cevap php

Ancak PHP4 kullanıldığı yerlerde hala sunucularda bulunan müşterilerimizin yaklaşık iki düzine kadar vardır, PHP4 "ölü" olduğunu biliyorum, ve biz, bir veya iki yıl civarında dek herhangi bir sunucu yükseltmeleri almazsınız.

Ben üstlenmeden çalışan ve şimdi düşük ortak payda, PHP4 (örneğin, tüm sınıflar var $ foo var) için kodlanmış bizim temel web framework, geliştirmeye başlamak üzereyim.

O sürümü dahil ben PHP4 herhangi Ö.Ö. yapmamıştım ama ben PHP sürümleri için farklı sınıfları yapmak gerekir merak ediyorum, ve PHP sürümüne göre? Ben fark olumsuz, ben bir güncelleme yapılmış ise iki yerde güncellemek zorunda kalacağını ve buna hiçbir gerçek dünya avantaj olabilir olmasıdır.

Kimse onlar eski PHP sürümleri destekleyen ipuçları sağlayabilir Yani, ben çok takdir ediyorum.

3 Cevap

Eğer bir "çerçeve" olarak kullanmayın böylece PEAR çoğu hala, php4 hedefliyor. Ben drupal ve CodeIgnitor zamanda hala (aynı zamanda Belki CakePHP'ye?) Php4 hedefliyoruz inanıyorum.

Nesneler ve PHP4 ile büyük sorun nesneler değer tarafından geçirilen olmasıdır, böylece çoğu diğer diller (php5 dahil) nesneler için sahip olağan semantik almak için başvuruları kullanmak gerekir. Her zaman nesnelere başvuru atamak için çok dikkatli olmak zorunda. Aksi takdirde dolaylı klonlanmış olacak. Bu eğer pisliği hata ayıklamak için sıkıcı ve çok zordur. Ayrıca, php5 ile kod uyumsuz yapacaktır. Örn.:

Bir nesne oluşturma:

$foo =& new Foo();

Argüman olarak bir işlev için bir nesneyi Passing:

class Bar {
  function cuux(&$foo) {
  }
}
$bar =& new Bar();
$bar->cuux($foo);

Argümanlar referanslar olduğundan, bir sabiti geçemez. Bunun yerine bir nesnenin null geçmelidir Yani, önce yerel bir değişkene NULL atamak zorunda. Örn.:

$bar =& new Bar();
$foo = null;
$bar->cuux($foo);

Bir işlev nesneleri dönersek:

class Bar {
  function &doink() {
    $foo =& new Foo();
    return $foo;
  }
}
$bar =& new Bar();
$foo =& $bar->doink();

Eğer imkansız doğrudan başka bir işlevin sonucu geri dönmek için yapan bir değişken için $ foo atamak ZORUNLU unutmayın. Örn. Bu yasadışı:

class Bar {
  function &doink() {
    return $this->foo->doink();
  }
}

Bu olmalıdır:

class Bar {
  function &doink() {
    $tmp =& $this->foo->doink();
    return $tmp;
  }
}

Sadece o işaretlerinden özledim ve tost konum. Ayrıca, referanslar nasıl davrandığını çok iyi bir anlayış olduğundan emin olun - Onlar tam olarak sezgisel değildir.

Ben pek bana php4 için bir şey geliştirmek hayal edebiliyorum, ama ben zorunda olsaydı ben muhtemelen temiz ve güzel PHP5 kod tutmak için iki codebases yapmak istiyorum.

Sınıflar PHP 4 sözdizimi, yani yazıldığından emin olun:

class MyClass {
    var $my; // PHP4 style declaration
    function MyClass() { // PHP4 constructor     
      $this->__construct(); // calling PHP5 constructor
    }
    function __construct() { // PHP5 constructor       
       $this->my = 1;
       ...other initialization stuff...
    }
    ...
}

Yani both PHP versions büyük çalışacaktır.