PHP ve Java arasındaki farklar nelerdir?

4 Cevap java

PHP yetkin ama Java öğrenmeye kimse bilmelidir ki PHP ve Java arasındaki temel farklar nelerdir?

Edit: Ben dillerin sözdizimi farklılıkları Yani, diziler nasıl idare, kendi veri türleri yani & değişkenleri referans ve benzeri :)

4 Cevap

Ayrıntılı bir liste değildir, ve ben bir süre geri öylesine Müthiş etkilendim Java bir tur yaptım PHP geliştiricisi değilim.

Java Her değişken bir veri türü ile önüne gerekir. Bu ilkel tür mantıksal, int, double ve char gibi türleri, yanı sıra ArrayList, String ve kendi nesneler gibi Object veri türlerini içerir

int  foo    = 36;
char bar    = 'b';
double baz  = 3.14;
String speech = "We hold these truths ...";
MyWidget widget = new MyWidget(foo,bar,baz,speech);


Her değişken sadece kendi türünde bir değeri tutabilir. Yukarıdaki bildirimleri kullanılarak aşağıdaki geçerli değil

foo = baz


(Ilkel değil türleri) nesneler üzerinde eşitlik nesne kimliği için denetler. Yani un-sezgisel aşağıdaki yanlış yazdırır. Dizeleri bu işlemek için bir eşitlik yöntemi var.

//see comments for more information on what happens 
//if you use this syntax to declare your strings
//String v1 = "foo";
//String v2 = "foo";

String v1 = new String("foo");
String v2 = new String("foo");

if(v1 == v2){
    pritnln("True");
}
else{
    println("False");
}


Diziler klasik C diziler. Sadece belirli bir tip değişkenleri tutabilir, bir sabit uzunlukta oluşturulması gerekiyor


Bunu çözmek için, (tek tip iş hala gerçek tutar rağmen) PHP daha diziler gibi hareket edecek ArrayList adındaki bir tanesi toplama nesnelerin bir dizi var. Siz sözdizimi gibi dizi alamadım, tüm manipülasyon yöntemlerle yapılır

//creates an array list of strings
ArrayList<String> myArr = new ArrayList<String>();
myArr.add("My First Item");

Dizi Listeleri hala sayısal tuşları var. Bir sözlüğü verecektir HashMap adlı başka bir koleksiyon nesnesi gibi (ya da ilişkilendirilebilir bir dizi 90'lı yıllarda okula giderse,) var.


Dizi Listeleri ve diğer koleksiyonları denilen bir şey jenerik () ile uygulanmaktadır. Ben bu yüzden Jenerikler hakkında anlıyorum hepsi bir nesne üzerinde çalışacağı şey türünü tanımlamak olduğu, bir Java programcısı değilim. Orada çok daha fazla oluyor orada.


Java hiçbir işaretçileri vardır. Ancak, tüm nesneler aslında PHP 4 için farklı PHP 5'e benzer referanslar vardır. Ben think Java (amortismana) PHP ve referansı ve sözdizimi vardır yoktur.


Tüm yöntem parametreleri Java değeri tarafından geçirilir. Tüm Nesneler aslında referanslar beri bir nesne geçirdiğinizde Ancak, referans değerini geçiyoruz. Bu bir yönteme geçirilen bir nesne işlerseniz, manipülasyonlar sopa anlamına gelir. Eğer böyle bir şey denemek Ancak, size beklediğiniz sonucu almazsınız

public void swapThatWontWork(String v1, String v2)
{
  String temp = var1;
  var1 = var2;
  var2 = temp;
}


Herhangi bir yöntem de dönüş türü belirtilmiş olması gerekir, ve bir yöntem gerekiyordu değil bir şey dönerse kötü şeyler olacağını söz olarak iyi bir zaman. Aşağıdaki yöntem bir int döndürür

public int fooBarBax(int v1){
}


Bir yöntem bir istisna atmak için gidiyor ise, bu tür olarak bildirmek zorunda, ya da derleyici onunla ilgisi olmayacaktır.

public int fooBarBax(int v1) throws SomeException,AnotherException{
   ...
}

Eğer bir istisna olabilir sizin yöntemi yazılı olmayan nesneleri kullanarak eğer bu zor alabilirsiniz.


PHPs ana küresel giriş noktası karşıt olarak Java ana kod giriş noktası, bir sınıfa bir yöntem olacaktır


Sen onları isterseniz ben onlar düşünüyorum rağmen Java'da değişken isimleri, bir desene ($) ile başlamayın


Java'da sınıf isimleri harf duyarlıdır.


Dizeler Java kesilebilir değildir, bu yüzden birleştirme pahalı bir işlem olabilir.


Java sınıf kütüphanesi konuları uygulamak için bir mekanizma sağlar. PHP böyle bir mekanizması vardır.


PHP yöntemleri (ve işlevleri) isteğe bağlı parametreleri var izin verir. Java, sen parametrelerin her olası listesi için ayrı bir yöntemi tanımlamak gerekir

public function inPHP($var1, $var2='foo'){}

public void function inJava($var1){
    $var2 = "foo";
    inJava($var1,$var2);
}
public void function inJava($var1,$var2){

}


PHP bir nesne, kendi yöntemleri yöntemlerini çağırdığında bu kullanılacak bir açık $ gerektirir. Java (yukarıdaki örnekte görüldüğü gibi) değildir.


Java programları inşa edilecek eğilimi PHP uygulamaları inşa edilir gibi "run, isteği işlemek çalışan durdurmak" nazik bir şekilde yolu tür "programı çalışır, çalışan kalır, istekleri işler".

Ben bu iki dil (yanı sıra zamanı sistemleri) tüm farklılıkları listelemek için çok farklı olduğunu düşünüyorum. Kafama gelen bazı gerçekten büyük olanlar:

  • Java PHP yorumlanır baytkoduna derlenmiş (Alan Stim işaret olarak PHP 4 yana değil, ama sanki hala davranır) olduğunu
  • PHP oldukça zayıf ve dinamik yazdığınız ise, Java, güçlü ve statik olarak yazılan
  • PHP çok dinamik web sayfaları oluşturmak için kullanılır. Java o da yapabilirsiniz, ancak (uygulamacıklara gibi, cep telefonu yazılımı, Şirket şeyler, 3d oyunlar, Google Web Toolkit ile ve GUI olmadan masaüstü uygulaması ...) yanı sıra başka bir şey yapabilir
  • add your favourite difference here

Bunu zamanı geldiğinde en farklılıkları fark, ama en önemli şey olacaktır:

  • PHP en projelerde göz ardı edilir bir seçenek olarak OOP (nesne yönelimli programlama) sunmaktadır. Java OOP şekilde programlamak gerekir, ama bir o kadar da OOP-dilde bir arka plan ile Java öğrenirken, o kadar karmaşa şeyler gerçekten kolay ve kullanımı cepten yanlış yol (veya alt-optimum şekilde diyebilirsiniz ya da verimsiz bir şekilde ...).
  • Java kesinlikle yazılmış olduğunu. PHP değildir;
  • PHP does a lot of implicit type conversion, which can actually be problematic and is why PHP5 has operakarşırs like === and !==. Java's implicit type conversion is primarily limited karşı aukarşı-boxing of primitive types (PHP has no primitive types). This often comes up.

Düşünün:

$val = 'a';
if (strpos('abcdefghij', $val)) {
  // do stuff
}

yanlış ve getiri endeksi 0 false dönüşür çünkü idam değil blok sahip olacak. Doğru sürümü:

$val = 'a';
if (strpos('abcdefghij', $val) !== false) {
  // do stuff
}

Java koşullu ifadeler açık bir boolean gerektirir;

  • PHP değişkenleri ve diziler bütün $ ve aksi farksız tarafından önüne edilir;
  • PHP ilişkisel diziler eşdeğer PHP Maps (örneğin, HashMap). Ilişkilendirilebilir diziler ekleme sipariş üzerine sipariş ve (değerler) sıradan diziler gibi kullanılabilir. Orada bir Java ekleme düzeni korur, ancak bu oldukça norm daha istisna Map uygulanması;
  • $arr['foo'] = 'bar' takmak veya bir ilişkisel dizi bir öğe güncelleyin. Java Map.put() ve Map.get() kullanmak gerekir;
  • PHP5 işlev işaretçileri ve anonim fonksiyonlar (create_function() kullanılarak) eşdeğeri vardır; 5.3 dil seviyesinde kapanışları tanıttı. Java biraz daha ayrıntılı olduğu, hem iç sınıfları kullanmanız gerekir. Ayrıca, iç sınıflar onlar gerçek kapanışları gibi onları güçlü değil yapım, (JavaPapers üzerine Java Closures okuyun) dış kapsam değişkenleri nasıl erişebileceğiniz sınırlıdır.
  • Değişken beyan PHP isteğe bağlıdır;
  • Işlevlerin içinde global değişken kullanımı PHP global anahtar kelimenin açık kullanımını gerektirir;
  • POST/GET parameters are, unless configured otherwise (register_globals()) aukarşımatically result in global variables of the same name. They can alternatively be accessed via the $_POST global variable (and $_SESSION for session variables) whereas support for these things comes from a JEE add-on called the servlets API via objects like HttpServletRequest and HttpSession;
  • Java size dönüş türleri ve parametre türlerini bildirebilirsiniz ise PHP fonksiyon bildirimi function anahtar sözcüğünü kullanır;
  • Java sürece farklı yöntem imzaları belirsiz değil gibi aşırı yüklenme yöntemi veriyor oysa PHP fonksiyon adları normalde çatışma olamaz;
  • PHP fonksiyon argümanlar için varsayılan değerleri vardır. Java değil. Java bu yöntem aşırı yükleme kullanılarak gerçekleştirilir.
  • PHP PHP dokümanlar karışacak "overloading" denir missing-method deseni, destekler.

Karşılaştırın:

function do_stuff($name = 'Foo') {
  // ...
}

karşı

void doStuff() {
  doStuff("Foo");
}

void doStuff(String what) {
  // ...
}
  • PHP String sabitler çok Perl gibi tek veya çift tırnak kullanılarak beyan edilir. Çift tırnak metin içinde gömülü değişkenleri değerlendirecektir. Tüm Java Dize sabitleri çift tırnak kullanımı ve böyle değişken değerlendirme var;
  • PHP object method calls use the -> operakarşır. Java uses the . operakarşır;
  • Construckarşırs in Java are named after the class name. In PHP they are called __construct();
  • In Java objects, this is implicit and only used karşı be explicit about scope and in certain cases with inner classes. In PHP5, $this is explicit;
  • Static methods in Java can be called with either the . operakarşır on an instance (although this is discouraged it is syntactically valid) but generally the class name is used instead.

Bu iki eşdeğerdir:

float f = 9.35f;
String s1 = String.valueOf(f);
String s2 = "My name is Earl".valueOf(f);

but the former is preferred. PHP uses the :: scope resolution operakarşır for statics;

  • Yöntem basan ve aşırı yük Java oldukça doğaldır ancak PHP bir kludge bir bit;
  • PHP kodu çok JSP'lere nasıl çalışır gibi, aksi takdirde büyük ölçüde bir HTML belgesi ne gömülür;
  • PHP uses the . operakarşır karşı append strings. Java uses +;
  • Java 5+ methods must use the ellipsis (...) karşı declare variable length argument lists explicitly. All PHP functions are variable length;
  • Variable length argument lists are treated as arrays inside method bodies. In PHP you have karşı use func_get_args(), func_get_arg() and/or func_num_args();
  • and no doubt more but thats all that springs karşı mind for now.
  • Eğer JavaDoc aracı yazılım belgelerine autogenerate için kullanabilirsiniz. Ancak belirli bir şekilde yorum yazmak gerekir.

  • you can't run PHP on mobile phones :) There are a lot of run time environments and platforms. That means you need to think in advance which libraries there could be missing or which limitations there could be (screen size, memory limits, file path delimiter "/" or "\" e.g).