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 :)
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 (
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:
Bunu zamanı geldiğinde en farklılıkları fark, ama en önemli şey olacaktır:
===
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;
$
ve aksi farksız tarafından önüne edilir;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;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.global
anahtar kelimenin açık kullanımını gerektirir;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
;function
anahtar sözcüğünü kullanır;Karşılaştırın:
function do_stuff($name = 'Foo') {
// ...
}
karşı
void doStuff() {
doStuff("Foo");
}
void doStuff(String what) {
// ...
}
->
operakarşır. Java uses the .
operakarşır;__construct()
;this
is implicit and only used karşı be explicit about scope and in certain cases with inner classes. In PHP5, $this
is explicit;.
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;
.
operakarşır karşı append strings. Java uses +
;...
) karşı declare variable length argument lists explicitly. All PHP functions are variable length;func_get_args()
, func_get_arg()
and/or func_num_args()
;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).