it-swarm.dev

PHP'de hangi özelliklere sahip olmak istersiniz?

Şimdi tatil mevsimi olduğundan ve herkes dileklerini dile getirdiğinden, merak ediyorum - hangi dil özelliklerini isterdiniz PHP? Dil için bazı pratik öneriler/isteklerle ilgileniyorum. Pratik olarak demek istediğim:

  1. Pratik olarak yapılabilecek bir şey (değil: "Keşke PHP kodumun ne anlama geldiğini tahmin eder ve hataları benim için düzeltir" veya "Keşke herhangi bir kod 5 ms'nin altında yürütülmesini diliyorum")
  2. PHP öğesinin başka bir dile değiştirilmesini gerektirmeyen bir şey (değil: "Keşke $ işaretlerini düşürseler ve kaşlı ayraçlar yerine boşluk kullanırlardı" veya "Keşke PHP derlenmişse, statik olarak yazıldı ve adında # vardı ")
  3. Mevcut kodun tümünü kırmayı gerektirmeyen bir şey ("500 işlevi yeniden adlandıralım ve parametre sırasını değiştirelim")
  4. dilini veya bazı ilginç yönlerini değiştiren bir şey (değil: "Keşke XYZ protokolünü destekleyecek bir uzantı olsaydı" veya "Keşke hata # 12345 nihayet düzeltildi ")
  5. Bir ranttan daha fazla bir şey (değil: "Keşke PHP çok kötü emmez")

Kimsenin iyi dilekleri var mı?

Mod düzenleme: Stanislav Malyshev bir çekirdek PHP geliştiricisidir.

88
StasM

Adlandırılmış parametreleri önemsemem.

getData(0, 10, filter => NULL, cache => true, removeDups => true);
// instead of:
getData(0, 10, NULL, true, true);

// or how about:
img(src => 'blah.jpg', alt => 'an albino platypus', title => 'Yowza!');

Ne yazık ki PHP devs bu fikri düşürdü zaten.

Daha fazla kayıt silme:

echo something_that_returns_array()[4];

Diğerleri adlandırılmış parametrelerden ve daha kısa dizi sözdiziminden bahsetmiştir. Daha kısa nesne sözdizimi de umursamadım.

$a1 = array(1, 2, 3, 4);
$a2 = [1, 2, 3, 4];

$b1 = (object)array('name' => 'foo');
$b2 = {'name' => 'foo'}; // or something?
93
Annika Backstrom

PHP ve yaklaşık 4 yıl boyunca JS ile yoğun bir şekilde çalıştıktan sonra, sanırım PHP JS'den ödünç almak iyi olurdu) :

1) Diziler ve Nesneler için steno gösterimi. Bunun tartışılmış ve Dahili olarak vurulmuş olabileceğine inanıyorum (bu yüzden duyuyorum - sosisin nasıl yapıldığını görmek istemiyorum), ama gerçekten, JS'deki diziler ve nesneler için gerçek gösterimin büyük olduğunu düşünüyorum verimlilik kazancı.

Örneğin:

$arr     = [1,2,3,4];
$assoc   = [foo=>'bar', baz=>'boo'];
$stdobj  = {foo->'bar', baz->'boo'};

(IMHO) yazmak daha kolay ve temiz

$arr     = array(1,2,3,4); // not too bad
$assoc   = array("foo"=>'bar', baz=>'boo'); // not too bad either
$stdobj  = new stdClass; // this gets pretty rough
$stdobj->foo = 'bar';
$stdobj->baz = 'boo';

Potansiyel karışıklık hakkında bazı endişelerin dile getirildiğini duydum, ama gerçekten, bu, yorumlu gösterimden daha kafa karıştırıcı mı? En azından, bir stdClass nesnesi PHP uygulama cesaretini kırmak için yeterince ayrıntılı olduğunu düşünüyorum).

2) Önceden tanımlanmış fonksiyonları ve yöntemleri yeniden tanımlayabilmek gerçekten yararlı olacaktır. Bir sınıfı genişleten ve yeni sınıfı somutlaştırmanın aşırı karmaşık veya pratik olmadığı durumları özellikle basitleştirecektir. Yine de çekirdek/kullanıcı-dışı fonksiyon ve yöntemlerin yeniden tanımlanmasından kaçınmamız gerektiğini düşünüyorum.


Bu ikisine ek olarak, PHP saydam bir şekilde unicode desteği gerektiğini düşünüyorum. Bu, geliştiriciler için gittikçe daha fazla sorun haline geliyor ve şu anda PHP 'da sunulan çözümler kafa karıştırıcı ve sıklıkla performans göstermiyor. Tüm standart dize işlevlerini kutudan unicode dostu yapmak, PHP programcılar için büyük kazanç).

Sorduğunuz için teşekkürler!

72
Funkatron

Eski bir uzun zamandır istediğim şeyler PHP özür dileyen:

  1. Diziler için daha kısa sözdizimi. PHP dizileri, esneklikleri nedeniyle dilin en korkunç özelliklerinden biridir, ancak some_array_method($argity, array('key' => $value)); yazmak için bir sürüklemedir. Bu teklifin maalesef PHP posta listesinden çıkarıldığını düşünüyorum.
  2. finally destek
  3. Nitelikler/ek açıklamalar. Bunlar, bir yönteme kodun yeniden kullanılmasına izin verecek şekilde özel davranış eklemenize olanak tanır. Örneğin, bir MVC çerçevesinde, bir denetleyici veya eylem yönteminin kullanıcının yetkilendirilmesini gerektirdiğini belirten bir AuthorizeAttribute tanımlanabilir. Çerçevenin kendisi, nitelikleri aramaktan ve bunlara göre hareket etmekten sorumlu olacaktır. Ben PHPUnit zaten yansıma kullanılarak okunabilir docblock yorum koyarak bir tür öznitelik kullandığına inanıyorum, ama docblock yorumları gerçek işlevsellik koymak kesinlikle bir hack.
  4. Daha kısa lambda sözdizimi. function($x){ return $x*2;} yazmak zorunda kalmadan, belki $x => return $x*2 Veya başka bir şey yazabilirim. Bu yine bu özelliği kullanmak için bir tür sürükleme yapan bir şey. Örneğin $results = array_filter(array(1,2,3), function($a) { return $a % 2; }): vs $results = array_filter(array(1,2,3), $a => return $a % 2 ); Birincisinde, gerçekleştirmeye çalıştığınız gerçek işle ilgili olmayan çok daha fazla tesisat vardır.
  5. Normal operatörler üzerinden matematik işlemlerini destekleyen yerleşik bir Decimal (sabit nokta matematik), operatörün aşırı yüklenmesi olmadığından bir tür Nice olurdu.
  6. MOAR MAGIC YÖNTEMLERİ. Sihirli yöntemler harika. PHP sihirli yöntemlerle aşırı yükleme operatörü eklediğini görebiliyordum (bunun temelde asla olmayacağını biliyorum.) Ama genel olarak, dile bağlanmak ve havalı şeyler yapmak için gerçekten harika yollar sunuyorlar.
48
davidtbernal

PHP'yi gerçekten nesne yönelimli yapın. PHP'in slap on another global function Evriminin sona ermesi gerekiyor.

array_merge(array_filter(array_intersect_key($arr1, $arr2), "is_int"), $arr3);

Bunu okumak benim için zor. Kendi zihinsel yığınımı yapmam ve kendim derlemem gerekiyor. Temel olarak tersini okumalıdır. $dog->wakeup()->bark();, bark(wakeup($dog)) ile karşılaştırıldığında okunması kolaydır

$arr1->array_intersect_key($arr2)->array_filter("is_int")->array_merge($arr3);

Nesne/yöntem desteğini etkinleştirme adımını şimdi gerçekleştirdiniz, lütfen bunu gerçek çekirdek PHP işlevlerinde kullanın.

500 işlevi yeniden adlandıralım ve parametre sırasını değiştirelim.

Bu işlevselliğin yöntemlere kaydırılması, bazılarının tutarlı bir şekilde kullanılarak yeniden adlandırılmasını sağlayacaktır. Dizeler ve dizilerin kendi yöntemleri olsaydı geriye dönük uyumluluğu bozar mıydı?

48
Keyo

Bir dile entegre sorgulama motoru harika olurdu. .NET'te LINQ adı verilen gibi bir çeşit Daha az SQL enjeksiyon saldırısı başarılı olmak için büyük veri dizileri arasında sıralama yapmanıza ve veritabanı erişimini standartlaştırmaya yardımcı olur.

40
Nick Berardi

Ah. İlkeller için tip ipucu. İyi olur.

38
ruurd

Kutudan daha iyi bir unicode destek diliyorum. Çoğu dil bu yönde hareket eder, ancak PHP hala her yerde garip komutlar vardır.

PHP dizeleri sadece düz bayt dizileridir. Geçerli varsayılan kodlamaya bağlı olduğu için içerikleri taşınabilir değildir.

Aynı şey serialize tarafından oluşturulan temsil için de geçerlidir. Herhangi bir kodlama bilgisi depolanmadan dizenin uzunluk ön ekli bayt gösterimini içerir.

Çoğu PHP (string) fonksiyonunun Unicode hakkında hiçbir fikri yoktur.Her fonksiyonun risk seviyesini içeren ayrıntılı bir liste için bakınız: http://www.phpwact.org/php/ i18n/uTF-8

http://blog.ginkel.com/2010/03/php-unicode-support-or-the-lack-thereof/

34
Emil Stenström

Tutarsız olarak adlandırılmış ve parametrelenmemiş nesne olmayanları değiştirmek için yerleşik yöntemlerle dizeleri nesne gibi yapın. Örneğin.

$subject->replace($search,$replace);
$string->split($separator);
$string->trim();

vb.

Edit: bir şey daha: Kodlamalarla ilgilenmeyi amaçlayanlar hariç, bu yöntemler her zaman UTF-8 beklemeli ve yaymalıdır. Giriş geçersiz UTF-8 ise, fonksiyonun çıktısı kodlamadan etkilenmese bile bir istisna atılmalıdır.

32
rjmunro

1) Yeni başlatılmış nesnelerin "$ this" değerini döndürmesini isterdim, böylece yöntem zincirini yapabilirim, $ user = new User ('john') -> setLastName ('Doe') -> save ();

2) Hiç Ruby ve en son düğümü kullandıysanız, harika bir etkileşimli Kabuk (IRB) var. PHP aslında yararlı bir tane için isterdim.

3) Özellikler/Karışımlar, ama bunların yolda olduğunu duydum.

4) $ myArray = ['my', 'array'] kısa dizisini ikinci yapmak istiyorum;

5) Tutarlı adlandırma/sipariş (yani iğne samanlığı)

24
Jakefolio

1) içerir içerir kurtulmak (). Diğer dosyalara yapılan başvurular referans olmalıdır ve bir kaynak kod dosyasının içeriğini başka bir dosyaya yerleştirmemelidir. Çok fazla PHP programcılar bir kitaplığa başvurmak için bir araç işlevi yerine bir tür işlev çağrısı olarak include () kullanır.Bu, değişken durum ve kararsız kod her türlü belirsizliğe yol açar. Perl benzeri bir 'kullanım' komutu.

2) Lütfen bir PHP uygulamasını tek bir dağıtılabilir bayt kodu dosyasına veya yürütülebilir dosyaya derleme için kutudan çıkarılmış yöntemini sağlayın.Bu PHP ticari bir geliştirme dili olarak. Bu dilin temel bir bileşeni olmalıdır. Bir uygulamanın GUI için kullanılan html dosyaları için endişelenmeyin çünkü ...

3) lütfen PHP etiketlerini HTML'ye gömme yeteneğinden kurtulun veya en azından bir 'gömme yok' modu sağlayın.Bu mutlak bir karışıklıktır ve uygulama mantığını ve sunumu karıştırarak kötü tasarımı teşvik eder. Geliştiriciler, PHP dosyaları bir araya getirip en iyisini ummayı ummak yerine) göstermek için şablonlar kullanıyor olmalıdır.

İmza,

GrandmasterB

ps: burada başkalarının söylediklerini dinleme, tüm yıl iyi oldum

20
GrandmasterB

E_ERROR İle bir dize olduğunu varsaymak yerine, tanımlanmamış sabitler üzerinde E_NOTICE İçin bir ini yönergesi.

18
Annika Backstrom

Yeni gelenlere mantıklı gelen iyi düşünülmüş bir adlandırma kuralıyla küresel ad alanını normalleştirin!

Sevgili Jeff Atwood'umuzu alıntılamak için: PHP berbat ama önemli değil !

14
David Murdoch

1) Daha kısa dizi/nesne sözdizimi, la JavaScript (daha önce belirtildiği gibi)

2) const değişkenlerinin define() gibi bir hesaplama sonucuna izin vermesine izin verin.

3) Doğrudan yapıcıdan zincirleme: new User()->name('Ryan');

4) Dizi kaydı silme: something_that_returns_array()[4];

5) Genişletilmiş SPL desteği. SPL, dize ve dizi işlevlerini (diğer şeylerin yanı sıra) nesneler olarak yeniden tasarlamak için iyi bir iş çıkarır. SPL'yi genişletmek, dilin bu kadar sarsıntılı olmasıyla ilgili birçok sıkıntıyı çözebilir.

6) ArrayObject() kullanmak array() kadar şeffaf olmalıdır. array_filter($array_object_instance) yapmadan array_filter($array_object_instance->getArrayCopy()) gibi şeyler yapabilmeniz gerekir. Daha da iyisi, elbette, $array_object_instance->filter() olacaktır.

7) Tam Unicode güzel olurdu.

8) Tuhaf otomatik tür dönüşümleri yapmayı bırakın. Örneğin, bir SimpleXMLElement nesnesini ilk önce açıkça bir dize olarak yazmadan echo yapamamanız gerekir. Ya da en azından, bir şey olduğunda (örneğin, katı modda veya error_reporting(-1) modu).

9) Birden fazla iş parçacığı veya bir tür olaylı/eşzamansız geri arama desteği. Bu, büyük dosyaları cURL yoluyla yüklemeye çalışırken en önemli şeydir. Eski skool iplikleri yerine Apple'ın Grand Central Dispatch'i gibi bir şey Nice olurdu. Ya da zaman uyumsuz isteklerde bulunabileceğiniz ve geri çağrıları tanımlayabileceğiniz JavaScript benzeri bir şey.

10) Tutarlı adlandırma/sipariş (yani iğne samanlığı) Güzel olurdu, ancak bunun SPL ile daha iyi çözülebileceğini düşünüyorum.

11) Resmi olarak desteklenen bir interaktif PHP Shell, IRB gibi. Facebook'ta Python'da yazılmış phpsh adlı bir tane var, ancak görmek istediğim lehçe yok.

12) Yansıma API'sı için, (a) sabitler (global ve sınıf) hakkındaki docblock yorumları ve (b) PHPDoc benzeri yorumları mantıklı bir veri yapısına ayrıştırma desteği ekleyin. Bunu yapmaya çalışan "docblock" adında bir PECL paketi var, ancak yazarın çok uzağa gittiği görülmüyor.

EDIT: 13) Ayrıca işlev adlarında ! Ve ? Kullanma yeteneğini görmek isterdim - like Ruby olabilir.

13
Ryan Parman
13
Kemo

SABİT diziler oluşturmak/tanımlamak için yasal bir yöntem görmek istiyorum. Bu tür işlevselliği simüle etmek için birkaç hackish yolu vardır, ancak PHP'nin düz bir özelliği olsaydı güzel olurdu. Java'nın "son" bildirimine benzer bir dizi oluşturabilseydiniz iyi olurdu.

Kurulumu çok hızlı olan bir giriş sistemi oluşturdum. Tek yapmanız gereken, kullanıcı bilgileri için istediğiniz alanları belirlemek üzere bir metin dosyasındaki dizinin içeriğini değiştirmek. Döngüler için bir alan kullanarak, form oluşturma ve giriş duyarlılığından veritabanı çağrılarına kadar her şeyi işler, ancak hepsi bu orijinal diziye bağlıdır.

Diziye sahip dosya izinlerle kilitlenir, ancak dizi eter içinde hareket ettikten sonra değiştirilebilir. Sistemin oldukça güvenli olduğunu düşünmeme rağmen hiçbir şeyi şansa bırakmayı sevmiyorum. Dizileri sonlandırma yöntemi böyle bir durum için Nice olur.

Yeni Fikir !!

Ohhh, ben php gerçekten istiyorum başka bir şey düşündüm. .Htaccess çalışma biçimine benzer php dosya işlemleri ve dizin işlemleri kontrol etmek için bir tür sistem istiyorum.

.Phpaccess dosyası bir tür aynı etki alanı/aynı Köken politikasını tetiklemelidir.

Örneğin, sanal ana bilgisayarlara sahip birçok site barındırıyor olsaydım, bir dizinde php'nin korumalı dizinimde çalışmaya çalışan herhangi bir komut dosyasının kaynağını kontrol etmesini söyleyen bir .phpaccess dosyası olabilir. Komut dosyası bu dizinden veya alt dizinlerinden gelmediyse, dosya işlemleri/veya yuva işlemleri reddedilir.

Bunun gibi bir sistemin sanal barındırma işlemini daha güvenli bir ortam haline getireceğini düşünüyorum. Bunlardan birini her sanal Ana Makinenin üstüne yerleştirebilseydiniz, birinin komşu bir sanal Ana Bilgisayardan gizlice girmenin bir yolunu bulma şansını azaltacaktır.

Ayrıca, bu şekilde tersine sabitlemek için bir yöntem olması iyi olur. yani, tek bir dizindeki komut dosyalarının bu dizine erişimini kısıtlamak.

Bu yin ve yang ya biliyor!

12
Dave B.

1) Python liste kavrayışı tarzında dizi kavrayışı:

$newlist = array($x->something for $x in $oldlist);

//with short array syntax:
$newlist = [$x->something for $x in $oldlist];

2) Kısa dizi sözdizimi

$newlist = [1,2,3,4,...];

3) empty (), '0' dizesini true olarak düşünmeyin

12
sfrench

Hardcore PHP programcı olarak en büyük iki dileğim:

  1. Sonunda destek. Bayraklar veya benzer yollarla kurgusal olarak dolaşmak büyük bir karmaşa.
  2. Getters ve setters için C # sözdizimi desteği görmek isterdim. Çok sayıda alıcı ve ayarlayıcıya sahip olduğunuzda, C # gibi basit bir sözdizimi Java yol ve alıcı ve ayarlayıcı yöntemleri yazma yerine) yerine harika bir performans yükseltici. dinamik olarak üyeler oluşturmak istiyorsanız (örneğin, bir şablon oluşturucusuna kullanmak için bazı değişkenler vermek istiyorsanız), ancak IDE otomatik tamamlamayı istediğiniz normal özellikler için iyi değildir, bilmek Bu, kodun daha küçük ve yine de okunabilir ve kullanımı kolay olmasına yardımcı olur.
11
Johnco

Dil sözdizimi : Geliştiricilerin ilgilendiği şeyle ilgili pihipi ve phpreboot konusunda bazı ipuçları var (phpreboot JS olmaktan çok uzak olsa da).

Geliştirme metodolojisi : Bu tür anketler gerçekten dikkate alınırsa PHP.net'in ömrünü büyük ölçüde artıracaktır. Daha akıllıca bir öğleden sonra IRC oturum sözdizimi kararı almayın.

Bireysel özellikler : Bazılarından daha önce bahsedilmişti, ama burada ekstra künt olmak için biraz karma yakacağım:

  • Unicode dize türü.
  • Bigint (bkz. Python).
  • Runkit yerleşik, her zaman iyi tasarlanmış olmayan yerleşik işlevleri ve sınıfları kaldırmak/yeniden adlandırmak/geçersiz kılmak için.
  • Modern OOP
    • çoklu kalıtım (nadiren becerikli özellikleri sözdizimi olan Edge vakalarını desteklemek için karmaşıklık yerine)
    • skalerler nesne olarak ikiye katlanabilir (bkz. Python), ör. array (), ArrayObject veya dizeleri SplString olarak çalışır (kullanılabilir yöntemlere ihtiyaç duyar, tüm dize işlevleri str::toupper()) olarak kullanılabilir olmalıdır
  • Boktan boktan vazgeç _ \ ad alanı sözdizimi , ayrıştırıcıyı düzeltin ve :: alternatif olarak. Bilirsiniz, gerçek bir dil gibi.
  • LINQ'nun herhangi bir varyasyonu (her ne kadar size güvenmese de, mantıklı bir sözdizimi hazırlayın)
  • veya XML değişmezleri.
  • Php.ini çalışma zamanı davranışından ve anlamsal anahtarlardan kurtulun. Bazı heyecanları doğru, ama geliştiricilere ve kullanıcı tabanına fayda sağlayacaktır.
  • Evet, magic_quotes henüz gitmedi.
  • Zend Engine bayt kodunu PBC birimine dönüştür

Gerçi, bu açık değilse, ben mutlu bunu yapmak için herkese fon ve ana uygulama olarak php.net öldürmek. :P
Oh, fark ettim, bu topluluk wiki'si. Yani aslında karma için değil, gerçek bir ilgi için burada olma şansınız var. Eğer öyleyse, dili ciddi şekilde inciten <b> konuya </b> bakın (directoritis).

9
mario

Hata ve İstisnaların tek bir kavramda birleştirilmesini görmek isterim (İstisnalar). İstisnaları yakalamak ve bunları bir günlüğe yazmak, hataları bulmak ve düzeltmek harika. Ancak, çok nadiren vurulan bir kod yolunda temelde yanlış bir şey varsa (okuma: PHP Hata), aynı bilgileri aynı veritabanına yönlendirmek için iyi bir yol yoktur.

Lütfen, Noel Baba, php.ini içinde istisnalar içine tüm hataları yapacak bir anahtar tanıtmak - ideal olarak, benim kod yakalayabilir istisnalar.

8
Alex
  • numaralandırma desteği (Java 1.5+) gibi)
  • Arayüzlerde ve sınıflarda yöntem dönüş tiplerini tanımlayabilme
  • özellikler ve yöntemlerle ilgili ek açıklamalar/meta veri tanımı desteği.
  • yöntem skaler argümanları için katı tip ipuçları yapabilecektir.
7
Kees van Dieren

Küçük ve orta boy web sitelerini çalmak için olduğu gibi PHP bana iyi uyuyor; Biraz yaratıcı olmayan olmalıyım, bu soruya bir cevap olarak düşünebileceğim tek şey, yüksek trafikli siteler için daha iyi ölçeklenmesini sağlayacak bir şey olurdu.

Başka bir süreçte çıktı sayfası oluştururken, örneğin bir süreçte bir veritabanını güncelleştirme gibi süreçleri diğer çekirdeklere yumurtlama açısından düşünüyorum. Hızlı bir google araması, bunun simüle edilebileceğini, ancak şu anda doğrudan php'de desteklenmediğini gösterir.

7
geekbrit

Skaler türlerin nesne olarak işlem görmediğini ve gerçek nesnelerin başka bir tür veya nesne gibi davranamayacağını özledim (__toString () nedeniyle dize hariç).

7
pestaa

http://php.net adresindeki "Kullanıcı Katkı Notları" nı temizleyin. Genel olarak büyük bir değer olmakla birlikte, bazen gerçek bir karmaşa.

6
bobah

PHP'de, geri aramalar ve temel bir lambda hesabı sağlayan create_function() ile liste işleme kapasitesi sağlayan bazı oldukça iyi dizi işlevleri vardır.

Ana sorun, PHP'de çok ayrıntılı olması, özellikle harita/azaltma komutları söz konusu olduğunda, bir steno sistemi mükemmel olurdu.

Daha da önemlisi, liste fonksiyonları tamamen tamamlanmamıştır:

  • foldr işlevi yoktur, array_reduce()foldl sağlar
  • array_map()array_walk() gibi ikinci argümandaki anahtarı iletmelidir
  • bir array_map_keys() tuş değişikliği için yararlı olabilir
  • liste kavraması çok karmaşıktır, range(), array_fill() ve array_fill_keys() yalnızca çok sayıda vakayı ele alır ve array_filter() ayrı

Ben PHP Haskell için yapmak değil, ancak PHP genellikle liste türü veri yapısı manipülasyonu ve bu araçların tam bir set olması için kullanılır saygı yararlı olacaktır.

5
Orbling

Operatör aşırı yüklenmesi:

$result = $MatrixA + $MatrixB * $MatrixC;
5
MicE

Büyük dosya desteği. Lütfen?

Bakınız http://bugs.php.net/bug.php?id=27792 (yine de dikkat edilmesi gereken daha fazla alan/işlev olabilir).

4
Don MacAskill

E_WARNING üretmek yerine İstisnalar ekleyin ... Böyle bir şeyi kullanamam çok can sıkıcı bir durum:

try{
   $f = fopen('asd', 'r');
   flock($f, LOCK_SH);

   while(!feof($f)){
       echo fread($f, 512);
   }

   fclose($f);

}catch(IOException $ex){
   echo 'Oops, something wrong: '.$ex->getCode();
}

Tabii ki, şu anda çok pratik değil ama almak çok can sıkıcı:

UYARI

UYARI

UYARI

ve doğru hata atmak için kendi hata_handler ve dize koklama hangi hata üretildi (izin, yanlış dosya adı veya başka bir şey; burada diğer hata kaynakları umursamıyorum) yazmadan kod akışını kontrol edemiyorum .

Umarım neden önemli olduğunu açıklamamıştım.

PHP bir süre önce Nesne Odaklı oldu ve biz PHP kullanan programcılar, OO özellikleri, "git" tanıtmak için sabırsızlanıyoruz ... Ben gerçekten oldu öğrendim, ben Bir April Fool'un günü olduğunu düşündüm.

4
eRIZ
  1. Nesne modelini birleştirin - tüm nesnelerin temel Object sınıfını genişletmesini sağlayın. Object sınıfı (diğer şeylerin yanı sıra) tüm sihirli yöntemleri uygular (böylece artık sihir olmazlar!)

  2. Uzantıları kendi ad alanlarına taşıyın - global ad alanını düzenleyin $conn = new \MySQLi\Connection();

  3. spl_autoload() işlevinin sakatını kaldırın! Cidden, bu muhtemelen PHP ve aynı zamanda en yararsız olanın en büyük özelliklerinden biridir. spl_autoload, ad alanlarını ve birden çok dosya uzantısını destekleyen, ancak bilinmeyen bir nedenden dolayı dosya adlarının küçük harfle yazılmasını gerektiren varsayılan otomatik yükleyicidir. Bir bunun için dolu hata rapor , ancak personel geri uyumluluk nedeniyle düzeltmeyeceğini söyledi. Doğru ... her çerçeve kendi otomatik yükleyicisiyle birlikte gönderilir, çünkü varsayılan çerçeve sakattır!

4
Mchl

Renk desteğini en son sürüme getirin ve standart yapılandırmalara ekleyin, tercihen varsayılan yapılandırmada açın http://wiki.php.net/rfc/taint

Bu, insanları düzgün şekilde kodlayarak XSS ve SQL enjeksiyon saldırılarını önler.

4
rjmunro

PHP için ek açıklamalar harika olurdu, Önümüzdeki yıllar için öne çıkacak bir özellik.Bu özellik temiz kodlarla büyük çerçevelerin yazılmasına yardımcı olacaktır.

3
user10916

else, while ve for için bir foreach yan tümcesi görmek istiyorum. Örneğin.:

while (/*condition*/) {
   /* display each result */
}
else {
   /* condition was never true; display "no results found" message */
}

else bloğu yalnızca while için koşul asla true ise yürütülür.

Bu, Boole bayraklarını izlemenize gerek kalmayacak ve belki de sınır durumları ve olası hata durumları hakkında düşünmenize yardımcı olabilir.

3
Macneil

Kısa açık etiketlerden, özellikle yankı bir = (.

<?=$myvar?>

... bundan çok daha iyi:

<?php echo $myvar;?>
3
dukeofgaming
  1. Bir gün veri türünü görmek istiyorum, ancak - Veri türleriyle uğraşmak zorunda kalmamanın basitliğini de seviyorum, bu benim için çift kenarlı bir kılıç.
  2. ad!
  3. Farklı yöntem imzalarıyla aşırı yük fonksiyon çağrıları
  4. Birim testi ve kod enjeksiyonu için daha iyi destek, PHPUnit şaşırtıcı bir araçtır, aynı zamanda Symfony kod enjeksiyon çerçevesi harikalar yapar ... ancak hepsi kendi öğrenme eğrisi ile birlikte gelir.
3
cdnicoll

Görünüşe göre hiç kimse bir isteğe bağlı tip güvenlikten bahsetmedi.

Bunun gibi bir kod yazabilmek harika olurdu:

<?php
$someVariable = 123;
$someVariable = "Hello World";

int $anotherVariable = 123;
////$anotherVariable  = "Hello"; // This must cause runtime exception.
////int $lastVariable = "World"; // This must cause it too.
?>

Başka bir örnek:

<?php
// Current style (which must remain).
function SayHello($howManyTimes)
{
    if (!is_int($howManyTimes))
    {
        throw new Exception('Argument $howManyTimes is invalid. An integer was expected, instead of ' . gettype($howManyTimes) . '.');
    }

    echo str_repeat('Hello', $howManyTimes);
}

// New, optional, style, allowing to have a shorter code.
function SayWorld(int $howManyTimes)
{
    echo str_repeat('World', $howManyTimes);
}

SayHello(123);
SayHello("Hello World");

SayWorld(123);
////SayWorld("Hello World"); // This must cause runtime exception.
?>
2
Arseni Mourzenko

Dahil etme çağrısından bir dosyayı ad alanına izin ver, bunun gibi

include('mytemplate.php', 'MyNamespace');

veya

include 'mytemplate.php' use MyNamespace;

Ve önek olmadan ad alanlarını içe aktarmamıza ("kullan") izin vermeye başlayın:

use OtherNamespace as self;

(ad alanı öneki olmadan kullanmak için her sınıfı içe aktarmak zorunda kalmak yerine)

2
user11122
  • Engellenmeyen SQL Sorguları (Biraz günlük eklemek gibi, ancak sorgunun sonucunu beklemeyin)
  • Paralel SQL Sorguları

sadece bir rüya

2
Erlango

Jeneratörler. Python'da olduğu gibi, verim ile.

2
ts01

__Destructor veya __toString öğelerine istisnalar atabilme. Ve gerçekten, bunun neden mümkün olmadığına dair bir açıklama var mı?

2
ts01

Dizi içinde bir yöntemin bir parametrenin ilkel türünü (bool | boolean, int | integer, float, double, string, object) ayarlama imkanı olması Nice olur.

Misal:

  • geçerli:

    class HttpResponse {
    public function __construct($version, $statuscode = HttpStatus::OK, HttpResponseHeaders $headers = array(), $body = '');
    

    }

  • umut:

    class HttpResponse { public function __construct($version, integer $statuscode = HttpStatus::OK, HttpResponseHeaders $headers = array(), string $body = ''); }
    

Ayrıca yararlı olabilecek bir Assert statik sınıf var düşündüm.

2
user11251

tüm türler için tür ipucu desteği ve mümkün olan her tür için _toXXX sihirli yöntemleri. (php ortak kullanımı IMHO'yu tür dönüşümü sınırlamak yerine/dönüşüm şamandıra <-> int/gibi bazı istisnalarla sürükler)

2
ts01

Kesinlikle yöntem imzalarını farklılaştırmak için tip ipucu kullanarak aşırı yükleme. Daha da ötesi, denetleyicimin bir PHP MVC çerçevesindeki eylemleri aşağıdaki gibi görünebileceği şekilde) bir tür ASP.NET stili "öznitelikleri" görmek istiyorum:

/* [HttpGet] */
public function login() {}

/* [HttpPost] */
public function login() {}
2
TaylorOtwell

PHP'nin değişmez bir Unicode dize sınıfına ihtiyacı vardır. Giriş dizelerinin geçerli, normalleştirilmiş UTF-8 olduğundan ve geçerli kaldığından emin olmak önemsiz olmalıdır.

$str = new Utf8String('āll īs ōk');
$str = $str->ucwords(); // Āll Īs Ōk
$str = $str->strtolower()->toAscii(); // all is ok
(string) $str; // UTF-8 bytes

PHP-UTF8 tabanlı bir prototip yaptım.

2
Steve Clay

Normal regexp değişmez değerleri, Perl stili qw{}, qq{} Ve q{} Alıntıları.

Zincirleme yöntem tüm nesneleri çağırır: $object{ ->method1(); ->method2(); ->getPerson()->getName(); }

İfade ifadesi: ({echo $a; $a = $a + 1; $a})

SABİT, YAPILAMIYOR, KAPATILAMIYOR short_open_tags. Yapılandırılamazlarsa, PHP kodu daha taşınabilir olacaktır. ERB - stil etiketleri dahil wha'ya bakın

1
Ming-Tang
  • Ana bilgisayar başına bir yönerge (Jason Greene düzeltme ekine benzer, ancak yerel) yapılandırmak zorunda kalmadan, otomatik olarak etki alanı adına dayalı sanal ana bilgisayarlarda open_basedir'i ayarlamak için yerel bir yol görmek istiyorum.

  • Lütfen, uygulama çapında küreseller! Uygulama genel değişkenleri, başlatıldıktan sonra tüm php komut dosyalarında kullanılabilir.

  • Diğer evreler için oturumu kapatmadan serbest bırakmanın bir yolu:

 session_start (); 
 $ _ SESSION ['favcolor'] = 'beyaz'; 
 session_flush (); // oturumun engeli kaldırıldı, böylece diğer evreler bunu kullanabilir 
 // büyük döngü ... 
 $ _ SESSION ['taste'] = 'sweet'; // oturum otomatik olarak tekrar engellenir 
 session_close (); 
  • Belki bazı disk üzerinde önbellek Nice olurdu, bu yüzden daha hızlı yürütme için php komut dosyalarını manuel olarak önceden derleyebiliriz. Bellek önbelleklerine benzer, ancak diskteki dosyalar ve manuel oluşturma (muhtemelen yeni bir dosya uzantısı kullanıyor).

  • Ayrıca, <? Php echo $ değişkenine kısayol olarak <? Php = $ değişken?> ?> Güzel olurdu (asp etiketlerinde olduğu gibi, ancak kısa/asp etiketleri devre dışı bırakıldığında).

1
Bacco

ve açıkçası, get_shutdown_functions () ve unregister_shutdown_function (). Şu anda buna erişmenin bir yolu yok. Ve daha genel olarak, geri arama istifleme için bazı soyut destek - spl_autoloads, kapatma işlevleri, hata işleyicileri (şu anda istiflenemez, ancak belki ...) vb. php veya kullanıcının kendisi tarafından çağrılan önceden tanımlanmış yığınlar ('otomatik yükleme', 'kapatma', 'hata' ...).

1
ts01

kaynakları kullanarak uzantılar için nesne sarmalayıcılar ekleme (curl, ftp, Gd2 ...). Sevmek

 $oFtp = new Ftp();

 $oFtp->connect();

 $oFtp->close();
1
ts01
  • lambdas için sözcüksel kapsam (sonra başka bir anahtar kelime kullanarak işlev) (veya uygun bir sözcüksel kapsam oluşturmak için sözdizimini engelle?)
  • nesne özelliklerindeki lambdasları çağrılabilir yap
  • her zaman lambda kapanış parantezli noktalı virgül anlamına
  • lanet kullanımı () normal işlevler için ekleyin !!
  • özellikleri
  • instanceof/is_a ()
  • jeneratörler
  • open Çalışma zamanı değişikliği istisnası
  • uygulamadan arayüzlere karşı kontrol etme işlevi
1
alan blaire

İlk iki can sıkımın PHP ile değil, zımni kullanım kurallarıyla ilgisi var.

  1. Kütüphane kodu için 'dosya adı uzantısı' (ör. PEAR/Horde/Zend/etc.) .phps Yerine .php İle bitmelidir. Bunun yararı, çalıştırılacak kodu ve dahil edilecek kodu açıkça ayırması ve isteğe bağlı olarak tüm (kodunuz) sunucudan oldukça okunabilir/göz atılabilir olmasıdır. Bonus olarak, otomatik yükleyicinizde spl_filename_extensions() başkalarının rahatlığı için kullanılabilir.

  2. Kural (belgelerde) hem :: Hem statik hem de örnek yöntemler için kullanıldığından, statik için :: Ve örneğin -> Kullanırlarsa şükran duyarım şey. İyi bir kongre olarak, yorum konusunda hala hataya yer olacaktır, ancak en azından daha açıktır.

Birkaç isim vermek gerekirse, aşağıdakileri de görmek istiyorum:

  1. Reflection * 'ın getDocComment (veya belki de adın veya argümanın başka bir varyantı) daha liberal olmalı ve aynı zamanda belirtilen türün üstünde yalnızca ilk yorumları (boşluk olana kadar) almalıdır. Başka bir deyişle: Gerçekten herhangi bir yorum türünde çıplak minimum sağlamak mümkün iken, ayrıntılı (okuma: satır yeme) doktor sevmiyorum: //, # veya /* ... */.

  2. Kullanılan ad alanlarının listesi, ör. getdefinednamespaces().

  3. 'Tanımlanmamış sabitler' davranışı bir ini yönergesi ile değiştirilebilir olmalıdır, ör. boş bir dize veya ölümcül hata. Bununla birlikte, asla örtük olarak bir dizgeye dönüştürülmemelidir! (Javascript'teki; gibi).

  4. __CLASS__ Sabiti de otomatik olarak bu şekilde çalışmalıdır (statik olarak adlandırılır) stdClass::__CLASS__ == '\stdClass'. Başka bir deyişle, bir dize tarafından bir sınıfa başvurmak yerine, bir sınıf ve büyü sabitini __CLASS__ Kullanmak istiyorum. (evet bu bir idefix)

  5. Döküm ve büyü yöntemleri __fromType($instancetype) ve __toType($type) yazın. Böylece bir nesne bir tamsayıya dökülebilir: $y = (int) $x veya başka bir nesneye $y = (BeanWrap) $x. Bununla birlikte, bunun uygulanması, sekiz farklı türü kapsayan on iki mevcut dökümün, bu dökümlerin adlarının artık sınıf adı (ör. İnt, binary, boolean) olarak kullanılamayacağı anlamına gelir.

1
23JUL

Bu konuyu gördüğümde, karşılaştığım bazı makalelerden bahsetmenin yararlı olacağını düşündüm.

  1. Bir çeşit harika harikalar. PHP'de operatör: http://justafewlines.com/2009/10/groovys-operator-in-php-sort-of/
  2. Kapakları iyileştirin: http://justafewlines.com/2009/10/whats-wrong-with-php-closures/
1
Alexey Shein

değil geriye dönük uyumluluğu bozmaya yetecek kadar akıllı olmak. Ben zor bir şekilde bir anahtar kelime olarak goto varlığını öğrendim, ben bir yöntem adı olarak kullanıyordum, bu yüzden php 5.3 için kodumu bir güncelleme 2 veya 3 saat sürdü.

Sınıflar için roller gibi bir şey nesne sistemine iyi bir ektir. Karmaşık bir şey yok.

class abc { use xyz::method; use uvw::__all; }

Bu, xyz sınıfından yöntem yöntemini ve uvm sınıfından tüm yöntemleri seçer.

Oluşturucu çağrısı, oluşturulduktan hemen sonra bir nesne olarak kullanılabilir olmalıdır.

new goodie()->youp();
1
giftnuss
  1. Skalerlerin nesneler gibi davranmasına izin verin. $ Scalar-> toLower () yapmaya çalışırsam; neden yanlış olduğumu söyle? Neden sadece geçici olarak "Skaler" nesne türü gibi bir şeye dökmüyor ve sonra "tanımsız yöntem" e geçmiyorsunuz (belki bunu null olarak yapmıyorsunuz)?

  2. Kaynakları kullanıcı alanından kaldırın. PHP şimdi nesneleri var. Şimdi kaynak olan her şey özel bir özellik olarak gizleyen bir nesne paketinde olabilir. __Sleep () ve __wakeup () için işlevsellik eklenmesi gerekebilir. Kolayca "benzer" bir durumda yeniden oluşturulabilir.Yapamasalar bile PDO nesnesi serileştirilemez: Aynı şeyin diğer nesnelerle yapılabileceğini varsayıyorum.

  3. Gerçek PHP topluluğunun kodlarıyla oy kullanmasına izin verin: varolan yöntemleri, sınıfları ve işlevleri yeniden tanımlamamıza izin verin. Kötü kod çürütecek, tıpkı Javascript'te olduğu gibi. PHP her zaman tahmin etmek yerine neye ihtiyaç duyduklarını anlarlar) Kullanılan/geçersiz kılınan işlevler ve işlevler dikkate alınmalıdır.

    Bu aynı zamanda PHP topluluk UTF (umarım UTF-8) sorunları ile dahil yan etkisi vardır. Unicode açar veya kapatır sistem genelinde bir ayar yerine, PHP geliştiriciler sadece uygulamaları için ihtiyaç duydukları işlevselliği geçersiz kılabilir.

  4. _ İmplcit ad alanı ayırıcısı olun. İnsanlar PHP5 beri kullanıyorum, eğer PHP 5.3. Ben onun karmaşıklıklarını bilmiyorum. Eğer kod hakkında bazı düşünce olduğunu biliyorum. Zend_Exception gibi sınıf isimleri yapar: İzin verin, geliştirici her zaman Zend_Exception veya\Zend\Exception ve asla Exception olarak erişmelidir.Onun bir parçası yerine tam ad olarak davranın.

  5. OOP: Javascript/Actionscript/Python'dan bazı ipuçları alın. Özellikler umut verici görünüyor, ancak çalışma zamanında türünü dinamik olarak değiştirmek harika olurdu.

  6. Özellikler: Görüyorum ki, mülklerle ilgili çalışmalarda konuşmalar var, lütfen bunları dinamik olarak uygulayın. PHP dinamik bir dil olmalıdır. Çalışma zamanında özellikleri (hemen hemen her şey) tanımlayabilmeliyiz.

  7. Sabitleri, ne için kullanıldıkları gibi ele alın: genel değişkenler. Sınıflar/İşlevler/Ad alanları bu faturaya uyar. Belki de herkes şu anda tümünün küresel olduğunu fark etmeye başladığında, çok fazla küresel değişken/sabit olması sorununu çözmek için daha fazla fikir olacaktır.

  8. JIT derleme: Javascript bunu yapabilir ve süper hızlı olabilir. PHP bu programın arkasındaki birkaç dosyadan biridir.

  9. PHP'nin "Köprü Metni" için optimize edilmesi gerekiyor, ancak çıktıdan bu şekilde kaçmanın kolay bir yolu yok. Şahsen ben bir htmlspecialchars () yapmak için 'baskı' yeniden tanımlamak. Genel olarak, sadece bir yazıcı veya yankı olması gerekebilir.

  10. Php.ini dosyasını basitleştirin. php.ini geliştiriciler için değil, Sistem Yöneticileri içindir. Kısa etiketlerin uyumsuzluklarını kaldırın, düzeltin veya kaldırın. Sistem yöneticilerinin tüm sistem için dilin özelliklerini açıp kapatabilmeleri can sıkıcıdır. Ve yazılımı dağıtmaya çalışırken onların etrafında çalışın.

  11. Bir istek döngüsü sona erdikten sonra (FastCGI ve Apache için) PHP geliştiricinin var olmasına izin verin. Bunu bir API üzerinden gösterin. Sistem yöneticisinin bunu devre dışı bırakmasına veya sınırlamasına izin verin. 10 saniye içinde sevk görevlisine gönderir veya kalıcı durumunu kaybeder).

  12. PHP genel bir programlama dili yapın. <? Php etiketleri can sıkıcı: bir! #/...

  13. Nesneler {} ve diziler [] oluşturmaktan çekinmez, Taje PiHiPi 'a bakar, bunu ve diğer birçok basit sözdizimi şekerini uygularlar.

    14: [] nesnelerinin özelliklerine ve işlevlerine erişmesine izin verin. Fonksiyonlar ve Sınıflar şimdi birinci sınıf vatandaş, değil mi? Nesnelerde dinamik olarak şeylere erişmenin [] fiili yolunu (javascript/actionscript gibi) yapın.

  14. PHP kodunun PHP modülleri olmasına izin verin.) Kütüphanemi birden çok işlemde sistem genelinde kullanılabilir hale getirmek için C öğrenmem gerekmemelidir. PHP topluluk bunu daha fazla anlıyoruz.

  15. Java/C'den fikir almak yerine, bunları Javascript, Actionscript ve Python gibi dinamik dillerden alın. Daha spesifik işlevler aşağıda listelenmiştir.

  16. Önemli Hatalar: Hataların çoğu neden hala kurtarılamıyor? Bir günlük dosyasında (çok yüksek düzeyde uygulanır) günlük hataları hata kavramını seviyorum. Sevmediğim şey her zaman bir "beyaz sayfa" hakkında duymaktır. Bunları önlemek için kodumda bir sürü kontrol ve bildirim yapıyorum: ama birisi işlevime bir nesne yerine null ilettiğinde, tanrı PHP böyle bir felaketten yapmadan kurtarabilir. Tabii bu bir hata, sadece diğer birçok dilde bu sadece bir beyaz ekran daha ele alınabilir ve sunulan bir NullReferenceError/Exception olarak adlandırılan aptalca görünüyor.

    En azından ölümcül hatalar eklemeyi bırakın. PHP 5.2 çalışan sunucular bir sürü yükseltme yeteneğine sahip, ama yapamam: çünkü eski kodu düzeltmek için her sunucuda ~ 200 siteleri üzerinden gitmek için zamanım yok Ne kadar az yeni ölümcül hata eklerseniz, PHP'nin yeni sürümleriyle insanları gemiye alma olasılığınız o kadar artar.

    Dilde mümkün olduğunca çok sayıda ölümcül hatayı kaldırın. PHP dinamik bir dil olmalıdır: diğer diller neden hatalardan kurtulabilir PHP ölümcül kabul ediyor?) program zorla çoğu dil bir NullReferenceException kabul sonra ölür.

  17. İstisnaları devam ettirin. Böylece istisnaları ve hataları daha kolay karıştırabiliriz.

  18. (En çok zaman alan ve olası olmayan) Dil tartışmasını, API/modül tartışmasını ve tercüman tartışmasını ayırın. Şu anki gibi entegre olmamalılar. Mevcut tercümanla ilgili sorunların en son çözülmesi gerekir. Pypy/Parrot/JVM hepsi birden çok dili destekler. V8 bunu yapmaz, ancak bazıları V8 üzerinde çalışmak ve yeteneklerinden yararlanmak için diğer dilleri JavaScript'e derlemeye çalışacak kadar hızlıdır.

    Bir tercüman/çalışma zamanı/vm olarak, geliştirme hedefleri bir dilden biraz farklıdır. PHP ile, sanki aynı biri gibi hissediyorlar. Bu yüzden, diğer çevirmenleri geliştirmeye çalışan insanlar, dil tasarımı tartışmasının tamamı PHP-tercüman tartışmasıyla karıştırıldığında tartışmalara ayak uydurmakta zorlanıyorlar.

    Bir tercüman olarak, tercüman ne kadar çok dil desteklerse o kadar iyi olur. Neden bir <? Python veya bir <? Javascript veya bir <? Actionscript'imiz yok. Kodu başka bir dilde yeniden yazmaktan bıktım, bu yüzden orada kullanabilirim. Bazıları zaten bunu yapmaya çalışıyor, muhtemelen toplumun diğer bölgelerinden destek toplayacaktı.

1
Reece45

Bir numaralı özelliğim

aşırı yükleme operatörleri

Kanımca, burada istenen yinelenen bir özellik, yani nesne olarak yerel türler, kendi sarmalayıcı sınıflarınızı oluşturarak düzeltilebilir. Projelerim için bir arrayData nesnesi, stringData nesnesi, intData nesnesi ve benzeri geliştirdik ... Bu çözer:

  • Güçlü yazım: bunlar özel sınıflar olduğundan, uygulanabilir
  • Aşırı yükleme türü: Benim diziVerilerim için gereken yöntemleri ekleyebilirim
  • Dönüşüm yazın: sınıflarımın her biri -> toArray (), -> toInt (), -> __ toString () yöntemlerine vb. Sahiptir.
  • şablonlarda kaçan html (dizeler stringData sınıfını genişleten userStringData sınıflarıdır).
  • aksi belirtilmedikçe değerler her zaman referans ile iletilir
  • intData ('string') oluşturmak bir istisna atar.
  • vb (fayda listesi hala çok uzundur)

Imho, bu nesne olarak yerel türlerden daha faydalıdır, çünkü ihtiyacınız olan tam sayıda yönteme sahip olabilir ve bunları beğeninize çağırabilirsiniz.

Ama çok özlediğim şey, nesnelerim üzerinde yerel operatörleri kullanma yeteneğidir. ArrayAccess sayesinde [] operatörünü kullanabiliyorum. Ama "+", "-" vb. ', $ string)) veya türlerimi ">" ve "<=" ile karşılaştır ...
Geçerli uygulamam $ intData-> add ($ n), $ intData-> substract ($ n) vb. Kullanıyor. Hantal, özellikle yerel bir int veya intData nesnesi beklediğiniz işlevlerde. Yani her fonksiyonun içinde exampleOf ile kontrol etmek zorundayım.

Başka bir deyişle, sınıflarım hazır, optimize edilmiş ve güzel olmasına rağmen, operatörleri aşırı yükleyene kadar, bir kavram kanıtı olmaktan çok daha fazlası değiller. Bunları gerçek bir projede kullanmak sinir bozucu.

0
Xananax

Zval referans sayısını ortaya çıkarın. (Evet, xdebug_debug_zval kullanabiliriz, ancak Xdebug'u canlı bir sitede etkinleştiririz, ick.) Kullanım örneği: aktif kayıt nesnesi deposu - harici kaynaklara (veritabanı satırları gibi) karşılık gelen modelleriniz var ve bu kaynakları değiştirmekten sorumludur. Aynı kaynak için iki ayrı nesne temsiline sahip olmak kötü olur (çakışan yazma nedeniyle veri kaybı vb.), Bu nedenle zaten yüklenmişse istenen kaynak için modeli döndürebilen bir tür önbelleğe ihtiyacımız vardır. Ancak bu, çöp toplama işlemini öldürür: model nesnesine son bir başvuru her zaman önbellekte kalır, bu nedenle büyük bir DB sorgusu veya büyük bir dizin gibi büyük bir kaynak kümesi üzerinden yineleme hızlı bir şekilde bellek tüketir. Nesne deposu, saklanan nesneye (deponun kendisine) yalnızca tek bir başvuru olup olmadığını kontrol edebilir ve bu durumda onu yok edebilirse bu önlenebilir.

0
Tgr

Ben php bazı erlang özellikleri gerekir:

  • sıcak kod yükleme
  • atomları
  • örüntü eşleştirme (işlevlerin adını, şuna benzer ifadeyi içerir:

Bayt kodu ile çalışma: kaydetme, yükleme, kaldırma vb.

Esnek gömme sistemi

0
Dan

Ben son günlerde php ilerleme ve ölçeklenebilirlik gibi.

Java] 'da sunulan yeni özellikler, işleri basitleştirmek yerine yalnızca karmaşık hale getirmiştir.

istek 1: ek kütüphane olarak db-bağlantı havuzu tesisi.

istek 2:

Yerleşik bir kütüphane olarak ters ajax veya kuyruklu yıldız programlama veya RTMP tesisi istiyorum. Bunlar zaten .net, Java, python ve Perl dojo vakfı tarafından geliştirilmiştir)

Biz php benzer şeyler var ama tam bir çözüm değil.

  1. Ayrıca SPL'de gözlemci modeli için destek vardır. ancak uygun şekilde belgelenmemiş.
  2. Xajax çerçevesi (iyi ama uygulamayı yeniden tasarlamayı gerektirir)

şimdilik hoşçakal.

0
Shashank

günümü yapacak birkaç şey

  • Yerleşik işlevler için akıllı adlandırma kuralları.
  • Dizeler ve sayısal değerler
  • Dönüş türü ipucu
  • E_STRICT varsayılan olarak açık
  • Özellikler, karışımlar ve çoklu kalıtım
  • Her şey bir nesnedir (yani Ruby benzeri saflık)
  • Ad alanlarına :: desteği ekleyin
  • Daha iyi Windows desteği
  • Kutunun dışında test etme
  • Exec () alt işleri için daha iyi belgeler
  • Php.net'in canlı arama ile yeniden tasarlanması
  • Kutudan çıktığı gibi Xdebug benzeri işlevler
  • PEAR taşınabilirliğinin geliştirilmesi - Ruby mücevher kullanıcıları bilmeli
0
Grayson

Gerçekten RFC'nin bırakıldığı ek açıklamaları almak istiyorum.

0
crystal88_
  • UTF-8 desteği
  • Dili tamamen OO yapın, Ruby ve Python) her şeyin bir nesne olduğu kavramını ödünç aldım. geliştiricilere bu kadar iyi değil ama bazı sınırlamalarla dil gelişimine hoş bir ek olabilir.

$ x = dizi (5, 60, 50, 50); $ x-> map (işlev ($ i) {return $ i * 2;}) -> Push (10);

$ p = "bazı dize"; $ q = $ p-> alt dize (0, 10);

vb.

Benim düşünceme göre bu, mevcut küresel işlevleri bozmadan yapılabilir. Ancak, çoğu işe yaramaz hale gelir ve zamanla kullanımdan kaldırılabilir.

  • Diziler için kısa gösterim Nice olur, ancak dil için kritik değildir.
0
Josh Scott

Döngüye bir başvuru ilettiğiniz bir foreach döngüsünde yinelenebilir bir sınıf kullanabilmek güzel olurdu:

 foreach (& $ myclass $ $ olarak) {
 echo $ me; 
} 

Neden şu anda işe yaramadığını araştırmak için fazla zaman harcamadım, belki de tekrarlanabilirlerin nasıl çalıştığıyla ilgili değil, sadece işe yaramadığını fark etmekten çok daha fazla araştırmadım.

0
gabe.

Daha hızlı işlev çağırma

call_user_func($f,$a1,$aN) var, ancak $f($a1,$aN) ile değiştirildi. Ancak, call_user_func_array($f,$args) için böyle bir şey yoktur.

Teklifim bunun için $f{$args} Gibi belirli bir dil sözdizimi oluşturmaktır. Herkesin call_user_func* 'Dan bir mil uzakta durmasının nedeni, daha iyi alternatifler olduğu anlamında son derece yavaş ve çirkin görünmeleridir.

Nesne tanımlama sözdizimi

Şu anda anında bir nesne oluşturmak için şunlara ihtiyacınız var: (object)array('prop'=>'value');. Kural olarak, object('prop'=>'value'); de olmalıdır. Ayrıca, kısa sözdizimleri JSON'a benzer şekilde kullanışlı olacaktır.

Türler için hepsi bir arada sihirli bir yöntem

Şu anda, __toString() var ve birçoğu __toInt/__toFloat/Etc'yi önerdi. Benim tavsiyem, ilk parametre olarak istenen veri türünün geçirildiği __toType() veya __typecast() 'i uygulamak olacaktır.

class Test {
    public function __toType($type){
        switch($type){
            case 'integer':
                return (int)$this->age;
            case 'string':
                return $this->age.' years';
            default:
                throw new EUnsupportedTypeException();
        }
    }
}

Daha spesifik olmak istersek, $ türünden sonra başka bir argüman ekleyebiliriz, yani $ class. Böylece şunları yapabilirsiniz: if($class=='person')return new Person($this->age);

Her foreach'ta Veri Türünü Belirtme

Şu anda, bir PHP işlev bağımsız değişkeninin veri türünü belirleyebilirsiniz, şöyle:

public function say_hello_to(UserClass $user){
    $this->say('Hello, '.$user->name.'!');
}

Bunu bir foreach ile de yapmak harika olurdu:

public function on_enter_office(){
    foreach($users as UserClass $user) // <- See UserClass here?
        $user>say_hello_to($this);
}

Geçerli "düzeltme" şöyle bir kapatma kullanıyor:

public function on_enter_office(){
    $users->each(function(UserClass $user){
        $user>say_hello_to($this);
    });
}

Düzeltme daha fazla kaynak, daha fazla yazma ve kapsamı bozuyor, bu nedenle yerel bir çözüm neden mevcut düzeltmeden daha kolay, daha temiz ve muhtemelen daha hızlı hale getirecek.

Koşullu Tanımlar

Bu muhtemelen birçok insan için yararlı bir özellik olmayacaktır, ancak eski sistemlerle uyumlu olsa bile çalıştırma kodunu minimumda tutmanın harika bir yoludur ve yürütmeyi daha hızlı hale getirir. Aşağıdaki kodu göz önünde bulundurun:

if (! function_exists ('json_encode')) {işlev json_encode ($ değer, $ options = 0) {// eski kod}}

  • // legacy code Bölümü hala ayrıştırılmıştır, bu nedenle buradaki tüm hatalar PHP sonlandırılmasına neden olur).
  • Ayrıştırma ayrıca PHP, hiç ihtiyaç duymasa bile daha yavaş yapar).
  • Kod geliştiriciler için sezgisel değil
  • Herhangi bir IDE ayrıştırma motorları, ifadeleri yoksayar ve işlevi iki kez listelemeye başlarlarsa karışacaktır.

Çözüm? Koşullu derleme:

#if PHP_VERSION<5.2
function json_encode($value, $options=0){
    // legacy code
}
#endif
0
Christian

daha iyi hipermetin bağlantıları desteği, yani tarayıcının geçerli uri'sini değiştirmek için kullanılabilen bir işlev/sınıf yöntemi içerir. ya da tamamen yeni bir tane oluşturmak için. $ _SERVER ['REQUEST_URI'] kullanarak || İstenen kaynağı anlamak için $ _SERVER ['PATH_INFO']. Bu, REST uygulamaları geliştirmek gibi bir şeyi kolaylaştırabilir. (rfc'nin UriScheme ve varsayılan şema uygulamasına göre, UriBase'i genişleten diğer UriSchemes'lerin uygulanmasını mümkün kılabilir)

UriResource sınıfı gibi bir şey sağlayarak, bir istemciden http isteklerine de fayda sağlayabilecek şekilde küçük işlevsellik snippet'leri istemeye olanak tanır.

Şablondan önce ve sonra çağrılabilen bir işlev yapın, bu iki işlev çağrısı arasında kısa etiketleri etkinleştirin. Bu işlev çağrıları arasında kullanılabilir hale getirilen tek değişkenler ilk işlev çağrısına iletilen değişkenlerdir (ilişkilendirilebilir dizi olarak (özü kullanarak)). Bu, php'nin kendisinde şablon geliştirmeyi kolaylaştırabilir (çerçevesiz çerçeve). No-framework PHP MVC çerçevesi

Sonuçta ben orada birçok php çerçeveler kolayca ortak bir şekilde php entegre edilebilir bazı benzerlikler var düşünüyorum.

ama whoami :)

0
immeëmosol
  1. Değişmez değer nesneleri
  2. Anonim sınıflar ve/veya nesne olarak sınıflar
  3. Dize veri türüne eşdeğer yerleşik nesne (daha önce bahsedilmiştir)
  4. Ek açıklamalar veya Python benzeri dekoratörler
  5. Scala'daki gibi singleton nesneleri
  6. İstisna olarak varsayılan hatalar (daha önce bahsedilmişti)
  7. UTF8 desteği
  8. Küresel vb.
  9. Birleşik erişim ilkesi - nesne yöntemlerini çağırmanın ve özellikleri değiştirmenin bir yolu (bkz. Scala)
0
sokzzuka