it-swarm-vi.com

Những tính năng nào bạn muốn có trong PHP?

Vì bây giờ là mùa lễ và mọi người đều thực hiện mong muốn của mình, tôi tự hỏi - bạn muốn thêm tính năng ngôn ngữ nào PHP sẽ thêm vào? Tôi quan tâm đến một số đề xuất/mong muốn thực tế cho ngôn ngữ. nghĩa là:

  1. Một cái gì đó có thể được thực hiện trên thực tế (không phải: "Tôi ước PHP sẽ đoán mã của tôi có nghĩa là gì và sửa lỗi cho tôi" hoặc "Tôi ước bất kỳ mã nào sẽ thực thi dưới 5ms")
  2. Một cái gì đó không yêu cầu thay đổi PHP sang ngôn ngữ khác (không phải: "Tôi ước họ bỏ dấu $ và sử dụng khoảng trắng thay vì dấu ngoặc nhọn" hoặc "Tôi ước PHP đã được biên dịch, nhập tĩnh và có # trong tên của nó ")
  3. Một cái gì đó sẽ không yêu cầu phá vỡ tất cả các mã hiện có (không phải: "Hãy đổi tên 500 hàm và thay đổi thứ tự tham số cho chúng")
  4. Một cái gì đó làm thay đổi ngôn ngữ hoặc một số khía cạnh thú vị của nó (không phải: "Tôi ước có phần mở rộng để hỗ trợ cho giao thức XYZ" hoặc "Tôi muốn lỗi # 12345 cuối cùng đã được sửa ")
  5. Một cái gì đó còn hơn cả một lời ca tụng (không phải: "Tôi ước PHP sẽ không tệ lắm")

Bất cứ ai cũng có mong muốn tốt?

Chỉnh sửa mod: Stanislav Malyshev là lõi PHP nhà phát triển.

88
StasM

Tôi sẽ không nhớ các tham số được đặt tên.

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!');

Thật không may, PHP devs đã loại bỏ ý tưởng đó rồi.

119

Thêm hội nghị:

echo something_that_returns_array()[4];

Những người khác đã đề cập đến các tham số được đặt tên, và cú pháp mảng ngắn hơn. Tôi sẽ không nhớ cú pháp đối tượng ngắn hơn là tốt.

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

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

Sau khi làm việc với PHP trong khoảng 13 năm và rất nhiều với JS trong khoảng 4, có một vài điều tôi nghĩ PHP sẽ làm tốt khi mượn từ JS :

1) ký hiệu viết tắt cho Mảng và Đối tượng. Tôi tin rằng điều này có thể đã được thảo luận và bắn hạ trên Quốc tế (vì vậy tôi nghe thấy - tôi không muốn xem xúc xích được tạo ra như thế nào), nhưng tôi thực sự, thực sự thấy rằng ký hiệu theo nghĩa đen cho mảng và đối tượng trong JS là rất lớn năng suất chiến thắng.

Ví dụ:

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

Là (IMHO) chỉ dễ viết và sạch hơn nhiều

$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';

Tôi đã nghe nói rằng một số lo ngại về sự nhầm lẫn tiềm ẩn đã được nêu ra, nhưng thực sự, điều này có khó hiểu hơn so với, ký hiệu di truyền không? Ít nhất, việc tạo một đối tượng stdClass trong PHP đủ dài để làm nản lòng thực tiễn, tôi nghĩ vậy.

2) Có thể xác định lại các chức năng và phương thức được xác định trước đó sẽ thực sự hữu ích. Nó đặc biệt đơn giản hóa các tình huống mở rộng một lớp và khởi tạo lớp mới là quá phức tạp hoặc không thực tế. Tuy nhiên, tôi nghĩ rằng chúng ta nên tránh xác định lại các chức năng và phương thức lõi/không sử dụng.


Ngoài hai thứ đó, tôi nghĩ PHP phải trong suốt hỗ trợ unicode. Điều này ngày càng trở thành một vấn đề đối với các nhà phát triển và các giải pháp hiện được cung cấp trong PHP gây nhầm lẫn và thường không hoạt động. Làm cho tất cả các chức năng chuỗi tiêu chuẩn không thân thiện với hộp sẽ trở nên thân thiện một chiến thắng lớn cho các lập trình viên PHP.

Cam ơn vi đa hỏi!

72
Funkatron

Những điều tôi muốn, như một người xin lỗi trước đây PHP:

  1. Cú pháp ngắn hơn cho mảng. PHP mảng là một trong những tính năng tuyệt vời của ngôn ngữ vì tính linh hoạt của chúng, nhưng đó là một lực cản để viết some_array_method($argity, array('key' => $value));. Tôi tin rằng đề xuất này đã được đưa vào danh sách gửi thư PHP không may.
  2. finally hỗ trợ
  3. Các thuộc tính/chú thích. Những thứ này cho phép bạn thêm hành vi tùy chỉnh vào một phương thức theo cách cho phép tái sử dụng mã. Ví dụ: trong khung MVC, người ta có thể định nghĩa một AuthorizeAttribute sẽ chỉ ra rằng bộ điều khiển hoặc phương thức hành động yêu cầu người dùng được ủy quyền. Khung chính sẽ chịu trách nhiệm tìm kiếm các thuộc tính và hành động theo chúng. Tôi tin rằng PHPUnit đã sử dụng một loại thuộc tính bằng cách đưa chúng vào các bình luận docblock, có thể được đọc bằng phản xạ, nhưng đưa chức năng thực tế vào các bình luận docblock chắc chắn là một hack.
  4. Cú pháp lambda ngắn hơn. Thay vì phải viết function($x){ return $x*2;}, có lẽ tôi có thể viết $x => return $x*2, Hoặc một cái gì đó. Đây lại là một cái gì đó chỉ làm cho nó trở thành một lực cản để sử dụng tính năng này. Ví dụ $results = array_filter(array(1,2,3), function($a) { return $a % 2; }): vs $results = array_filter(array(1,2,3), $a => return $a % 2 ); Cái trước chỉ có nhiều ống nước hơn về cơ bản không liên quan đến công việc thực tế mà bạn đang cố gắng thực hiện.
  5. Một Decimal (toán học điểm cố định) tích hợp hỗ trợ các phép toán thông qua các toán tử thông thường sẽ là loại Nice, vì chúng ta không bị quá tải toán tử.
  6. PHƯƠNG PHÁP TẠP CHÍ NHẤT. Phương pháp kỳ diệu là tuyệt vời. Tôi có thể thấy PHP thêm quá tải toán tử thông qua các phương thức ma thuật (tôi biết điều này về cơ bản sẽ không bao giờ xảy ra.) Nhưng nói chung, chúng cung cấp những cách thực sự tuyệt vời để kết nối với ngôn ngữ và làm những điều tuyệt vời.
48
davidtbernal

Tạo PHP thực sự hướng đối tượng. Quá trình phát triển slap on another global function Của PHP cần kết thúc.

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

Điều này là khó cho tôi để đọc. Tôi phải tạo ra ngăn xếp tinh thần của riêng mình và tự biên dịch nó. Về cơ bản nó nên đọc theo chiều ngược lại. $dog->wakeup()->bark(); dễ đọc so với bark(wakeup($dog))

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

Bây giờ bạn đã thực hiện bước hướng tới hỗ trợ đối tượng/phương thức hỗ trợ, vui lòng sử dụng nó trong lõi thực tế PHP.

Hãy đổi tên 500 hàm và thay đổi thứ tự tham số cho chúng.

Chuyển chức năng này sang các phương thức sẽ cho phép chúng được đổi tên bằng cách sử dụng một số nhất quán. Nó sẽ phá vỡ bất kỳ khả năng tương thích ngược nếu chuỗi và mảng có phương thức riêng của họ?

48
Keyo

Một công cụ truy vấn tích hợp ngôn ngữ sẽ là tuyệt vời. Sắp xếp giống như những gì có sẵn trong .NET được gọi là LINQ. Nó sẽ giúp sắp xếp thông qua các mảng dữ liệu khổng lồ và chuẩn hóa truy cập cơ sở dữ liệu, để ít cuộc tấn công SQL-SQL thành công hơn.

40
Nick Berardi

Oh. Gợi ý cho người nguyên thủy. Thế thì tốt quá.

38
ruurd

Tôi thực sự muốn hỗ trợ unicode tốt hơn ra khỏi hộp. Hầu hết các ngôn ngữ di chuyển theo hướng đó nhưng PHP vẫn có các lệnh lạ nằm rải rác khắp nơi.

Chuỗi PHP chỉ là mảng byte đơn giản. Nội dung của chúng không thể mang theo được vì nó phụ thuộc vào mã hóa mặc định hiện tại.

Điều tương tự áp dụng cho các đại diện được xây dựng bằng cách tuần tự hóa. Nó chứa một đại diện byte có tiền tố dài của chuỗi mà không thực sự lưu trữ bất kỳ thông tin mã hóa nào.

Hầu hết các hàm PHP (chuỗi) không có đầu mối về Unicode. Để biết danh sách chi tiết bao gồm mức độ rủi ro của từng chức năng, hãy tham khảo: 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

Tạo các chuỗi đối tượng như thế, với các phương thức được xây dựng để thay thế các chuỗi không đối tượng được đặt tên và tham số không nhất quán. ví dụ.

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

vân vân.

Chỉnh sửa : một điều nữa: Các phương thức này luôn luôn mong đợi và phát ra UTF-8, ngoại trừ các phương thức được dành riêng để xử lý mã hóa. Nếu đầu vào không hợp lệ UTF-8, nên ném ngoại lệ, ngay cả khi đầu ra của chức năng sẽ không bị ảnh hưởng bởi mã hóa.

32
rjmunro

1) Tôi rất thích các đối tượng mới được khởi tạo để trả về "$ this" để tôi có thể phương thức chuỗi, $ user = new User ('john') -> setLastName ('Doe') -> save ();

2) Nếu bạn đã từng sử dụng Ruby và nút gần đây nhất, họ có Shell tương tác tuyệt vời (IRB). Tôi rất thích PHP để có một cái thực sự hữu ích.

3) Đặc điểm/Mixins, nhưng tôi nghe thấy chúng đang trên đường.

4) Tôi muốn thứ hai mảng ngắn $ myArray = ['my', 'mảng'];

5) Đặt tên/đặt hàng nhất quán (ví dụ: kim haystack)

24
Jakefolio

1) xin vui lòng thoát khỏi bao gồm (). Các tham chiếu đến các tệp khác phải là các tham chiếu và không thực sự đặt nội dung của một tệp mã nguồn này vào một tệp khác. Quá nhiều PHP lập trình viên sử dụng bao gồm () như một kiểu gọi hàm thay vì phương tiện để tham chiếu thư viện. Điều này dẫn đến tất cả các loại mơ hồ ở trạng thái biến và mã không ổn định. Thay thế bằng một lệnh 'sử dụng' giống như Perl.

2) vui lòng cung cấp một ngoài hộp phương pháp biên dịch a PHP ứng dụng thành một tệp mã byte phân phối duy nhất hoặc có thể thực thi được. Điều này sẽ tăng cường đáng kể sự hấp dẫn của PHP là ngôn ngữ phát triển thương mại. Đây phải là thành phần cơ bản của ngôn ngữ. Đừng lo lắng về các tệp html được sử dụng cho GUI của ứng dụng vì ...

3) vui lòng loại bỏ khả năng nhúng PHP thẻ vào HTML. Hoặc ít nhất cung cấp chế độ 'không nhúng'. Đây là một mớ hỗn độn tuyệt đối và khuyến khích thiết kế xấu bằng cách trộn logic và trình bày ứng dụng Các nhà phát triển nên sử dụng các mẫu để hiển thị và không vỗ vào nhau PHP các tệp cùng nhau và hy vọng điều tốt nhất.

Đã ký

Chưởng môn

ps: không nghe những gì người khác ở đây nói, tôi đã rất tốt cả năm

20
GrandmasterB

Một lệnh ini cho E_ERROR trên các hằng số không xác định, thay vì giả sử đó là một chuỗi có E_NOTICE.

18
Annika Backstrom

Bình thường hóa không gian tên toàn cầu với một quy ước đặt tên được suy nghĩ kỹ càng có ý nghĩa với những người mới đến!

Để trích dẫn Jeff Atwood yêu quý của chúng tôi: PHP tệ nhưng không thành vấn đề !

14
David Murdoch

1) Cú pháp mảng/đối tượng ngắn hơn, một la JavaScript (như đã đề cập trước đó)

2) Cho phép các biến const cho phép kết quả của phép tính như define() does.

3) Xâu chuỗi trực tiếp từ hàm tạo: new User()->name('Ryan');

4) Hội thảo truyền hình mảng: something_that_returns_array()[4];

5) Hỗ trợ SPL mở rộng. SPL thực hiện một công việc tốt là mô phỏng lại các hàm chuỗi và mảng (trong số những thứ khác) làm đối tượng. Việc mở rộng SPL có thể giải quyết được rất nhiều sự hiểu biết về ngôn ngữ đang bị đùa giỡn.

6) Sử dụng ArrayObject() nên trong suốt như sử dụng array(). Bạn sẽ có thể làm những việc như array_filter($array_object_instance) mà không cần làm array_filter($array_object_instance->getArrayCopy()). Thậm chí tốt hơn, tất nhiên, sẽ là $array_object_instance->filter().

7) Unicode đầy đủ sẽ rất hay.

8) Dừng thực hiện chuyển đổi loại tự động kỳ lạ. Ví dụ: bạn không thể echo một đối tượng SimpleXMLE bổ sung mà không có kiểu chữ rõ ràng đầu tiên dưới dạng chuỗi. Hoặc ít nhất, ném một cái gì đó khi nó xảy ra (ví dụ: ở chế độ nghiêm ngặt hoặc bất kỳ chế độ nào error_reporting(-1) is).

9) Hỗ trợ cho nhiều luồng hoặc một số loại cuộc gọi lại không đồng bộ/không đồng bộ. Điều này quan trọng nhất khi cố gắng tải lên các tệp lớn thông qua cURL. Thay vì các chủ đề cũ kỹ, một cái gì đó như Grand Central Dispatch của Apple sẽ rất tuyệt. Hoặc thậm chí một cái gì đó giống như JavaScript nơi bạn có thể thực hiện các yêu cầu không đồng bộ và xác định các cuộc gọi lại.

10) Đặt tên/đặt hàng nhất quán (nghĩa là kim haystack) sẽ tốt, nhưng tôi nghĩ điều này có thể được giải quyết tốt hơn với SPL.

11) Một tương tác được hỗ trợ chính thức PHP Shell, như IRB. Facebook có một cái gọi là phpsh được viết bằng Python, nhưng nó thiếu sự đánh bóng mà tôi muốn thấy.

12) Đối với API Reflection, thêm hỗ trợ cho (a) nhận xét docblock về hằng số (toàn cầu & lớp) và (b) hỗ trợ để phân tích các nhận xét giống như PHPDoc thành cấu trúc dữ liệu hợp lý. Có một gói PECL được gọi là "docblock" cố gắng thực hiện điều này, nhưng có vẻ như tác giả đã đi rất xa.

EDIT: 13) Tôi cũng rất thích xem khả năng sử dụng !? trong tên hàm - như Ruby có thể.

13
Ryan Parman
13
Kemo

Tôi muốn xem một phương pháp hợp pháp để tạo/xác định mảng CONSTANT. Có một vài cách hackish để mô phỏng loại chức năng này nhưng sẽ rất tuyệt nếu nó chỉ là một tính năng trực tiếp của PHP. Sẽ thật tuyệt nếu bạn có thể tạo một mảng theo cách tương tự như khai báo "cuối cùng" của Java.

Tôi đã tạo một hệ thống đăng nhập rất nhanh để thiết lập. Tất cả bạn phải làm là thay đổi nội dung của một mảng trong tệp văn bản để chỉ định các trường bạn muốn cho thông tin người dùng. Sử dụng một vòng lặp cho các vòng lặp, nó xử lý tất cả mọi thứ từ tạo biểu mẫu và độ nhạy đầu vào, đến các cuộc gọi cơ sở dữ liệu nhưng tất cả phụ thuộc vào mảng ban đầu này.

Các tập tin với mảng được khóa với quyền nhưng một khi mảng di chuyển xung quanh trong ether thì nó có thể thay đổi. Mặc dù tôi cảm thấy hệ thống này khá an toàn nhưng tôi không muốn để bất cứ điều gì có cơ hội. Một phương pháp để hoàn thiện mảng sẽ là tốt cho một tình huống như thế này.

Ý tưởng mới !!

Ohhh, tôi đã nghĩ đến một cái gì đó khác mà tôi thực sự sẽ thực sự thích trong php. Tôi muốn một số loại hệ thống để kiểm soát các hoạt động tệp php và các hoạt động thư mục tương tự như cách .htaccess hoạt động.

Tệp .phpaccess sẽ kích hoạt một số loại chính sách/cùng tên miền.

Ví dụ: Nếu tôi đang lưu trữ nhiều trang web có máy chủ ảo, tôi có thể có tệp .phpaccess trong thư mục để báo cho php kiểm tra quỹ đạo của bất kỳ tập lệnh nào đang được thực thi trên thư mục được bảo vệ của tôi. Nếu tập lệnh không đến từ thư mục đó hoặc thư mục con của nó thì các thao tác tệp/hoặc hoạt động ổ cắm sẽ bị từ chối.

Tôi nghĩ rằng một hệ thống như thế này sẽ làm cho việc lưu trữ ảo trở thành một môi trường an toàn hơn nhiều. Nếu bạn có thể đặt một trong số chúng ở đầu mỗi Máy chủ ảo thì sẽ giảm bớt cơ hội ai đó tìm cách lẻn vào từ Máy chủ ảo lân cận.

Ngoài ra nếu nó là tốt để có một phương pháp bảo đảm nó theo nghịch đảo của cách này. tức là hạn chế phạm vi tiếp cận của các tập lệnh trong một thư mục vào thư mục đó.

Đó là âm và dương ya biết!

12
Dave B.

1) Hiểu mảng theo kiểu Python hiểu danh sách:

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

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

2) Cú pháp mảng ngắn

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

3) Làm trống () không coi chuỗi '0' là đúng

12
sfrench

Hai điều ước lớn nhất của tôi là một người khó tính PHP của PHP:

  1. Hỗ trợ cuối cùng. Đó là một mớ hỗn độn lớn để hư cấu xung quanh điều này thông qua cờ hoặc phương tiện tương tự.
  2. Tôi rất thích thấy hỗ trợ về cú pháp của C # cho getters và setters. Khi bạn có nhiều getters và setters, một cú pháp đơn giản như C # là một công cụ tăng cường hiệu năng tuyệt vời thay vì thực hiện theo cách Java và viết phương thức getter và setter. Phương thức ma thuật rất tuyệt vời trong trường hợp bạn muốn tạo thành viên một cách linh hoạt (ví dụ: nếu bạn muốn cung cấp cho trình kết xuất mẫu một số biến để sử dụng), nhưng không tốt cho các thuộc tính thông thường mà bạn muốn IDE để tự động hoàn tất, hãy biết loại của họ, v.v. điều này sẽ giúp làm cho mã nhỏ hơn và vẫn dễ đọc và dễ sử dụng.
11
Johnco

Cú pháp ngôn ngữ : Có một số manh mối tốt trong pihipiphpreboot về những gì nhà phát triển quan tâm (mặc dù phpreboot đi quá xa trở thành JS).

Phương pháp phát triển : Nó sẽ giúp tăng đáng kể tuổi thọ của PHP.net nếu các khảo sát như vậy thực sự được tính đến. Không thực hiện thêm bất kỳ buổi chiều willy-nilly nào IRC quyết định cú pháp phiên.

Các tính năng riêng lẻ : Một số tính năng đã được đề cập trước đây, nhưng tôi sẽ vui vẻ đốt một số nghiệp để làm cùn thêm ở đây:

  • Kiểu chuỗi Unicode.
  • Bigint (xem Python).
  • Runkit dựng sẵn để loại bỏ/đổi tên/ghi đè các hàm và lớp dựng sẵn, không phải lúc nào cũng được thiết kế tốt.
  • OOP hiện đại [.__.]
    • nhiều kế thừa (thay vì phức tạp để hỗ trợ các trường hợp Edge hiếm khi có cú pháp đặc điểm vụng về)
    • vô hướng có thể tăng gấp đôi dưới dạng đối tượng (xem Python), ví dụ: mảng () hoạt động như ArrayObject hoặc chuỗi dưới dạng SplString (cần các phương thức có thể sử dụng, tất cả các func chuỗi nên có sẵn dưới dạng str::toupper())
  • Không dùng thứ rác rưởi \ cú pháp không gian tên , sửa trình phân tích cú pháp và chấp nhận :: thay thế. Bạn biết đấy, giống như một ngôn ngữ thực sự.
  • Bất kỳ biến thể nào của LINQ (mặc dù tôi không tin các bạn đã nghĩ ra một cú pháp hợp lý)
  • hoặc bằng chữ XML.
  • Loại bỏ hành vi thời gian chạy php.ini và chuyển đổi ngữ nghĩa. Nó lấy ra một số sự phấn khích, đúng, nhưng sẽ có lợi cho các nhà phát triển và cơ sở người dùng.
  • Phải, magic_quotes vẫn chưa biến mất.
  • Chuyển đổi mã byte Zend Engine sang PBC

Mặc dù, nếu điều này không rõ ràng, tôi vui vẻ tài trợ cho bất kỳ ai khác làm điều sau và loại bỏ php.net làm triển khai chính. :P
[.__.] Ồ, chỉ cần chú ý, đó là wiki cộng đồng. Vì vậy, có một cơ hội bạn không thực sự ở đây vì nghiệp, nhưng quan tâm thực sự. Nếu vậy, hãy xem xét vấn đề <b> </ b> làm tổn thương nghiêm trọng ngôn ngữ (viêm đạo diễn).

9
mario

Tôi muốn thấy sự thống nhất giữa Lỗi và Ngoại lệ thành một khái niệm duy nhất (Ngoại lệ). Thật tuyệt vời khi có thể bắt ngoại lệ và ghi chúng vào nhật ký, để tìm và sửa lỗi theo cách đó. Nhưng nếu có một cái gì đó sai về cơ bản (đọc: PHP Error) trong một mật mã rất hiếm khi xảy ra, thì không có cách nào tốt để đưa thông tin đó vào cùng một cơ sở dữ liệu về các vấn đề.

Xin vui lòng, Santa, giới thiệu một công tắc trong php.ini sẽ biến tất cả các lỗi thành ngoại lệ - lý tưởng nhất là các ngoại lệ tôi có thể bắt được trong mã của mình.

8
Alex
  • hỗ trợ liệt kê (như Java 1.5+)
  • Có thể định nghĩa các kiểu trả về của phương thức, trong các giao diện và các lớp
  • hỗ trợ cho các chú thích/định nghĩa siêu dữ liệu về các thuộc tính và phương thức.
  • có thể thực hiện gợi ý kiểu nghiêm ngặt cho các đối số vô hướng phương thức.
7
Kees van Dieren

PHP rất phù hợp với tôi vì nó phù hợp với các trang web vừa và nhỏ; Tôi phải là một chút không tưởng tượng, điều duy nhất tôi có thể nghĩ như là một câu trả lời cho câu hỏi này sẽ là một cái gì đó làm cho nó có quy mô tốt hơn cho các trang web lưu lượng truy cập cao.

Tôi đang suy nghĩ về việc sinh ra các quy trình cho các lõi khác, ví dụ như cập nhật cơ sở dữ liệu trong một quy trình trong khi tạo trang đầu ra trong quy trình khác. Một tìm kiếm nhanh trên google chỉ ra rằng điều này có thể được mô phỏng, nhưng hiện tại không được hỗ trợ trực tiếp trong php.

7
geekbrit

Tôi thực sự nhớ rằng các kiểu vô hướng không được coi là các đối tượng và các đối tượng thực không thể hoạt động như bất kỳ loại hoặc đối tượng nào khác (ngoại trừ chuỗi do __toString ()).

7
pestaa

Dọn dẹp "Ghi chú đóng góp của người dùng" trên http://php.net . Chúng đôi khi là một mớ hỗn độn thực sự, trong khi nói chung là một giá trị lớn.

6
bobah

Có một số hàm mảng khá tốt trong PHP, cung cấp khả năng xử lý danh sách, với các cuộc gọi lại và create_function() cung cấp một phép tính lambda cơ bản.

Vấn đề chính với nó, là nó quá dài dòng trong PHP, một hệ thống tốc ký sẽ rất tuyệt vời, đặc biệt là khi các lệnh map/less có liên quan.

Quan trọng hơn, các chức năng danh sách không hoàn toàn đầy đủ:

  • không có hàm foldr, array_reduce() cung cấp foldl
  • array_map() nên truyền khóa trong đối số thứ hai, vì array_walk() does
  • một array_map_keys() có thể hữu ích cho việc sửa đổi khóa
  • việc hiểu danh sách rất khó hiểu, range(), array_fill()array_fill_keys() chỉ xử lý rất nhiều trường hợp và array_filter() là riêng biệt

Tôi không có ý định tạo PHP vào Haskell, nhưng PHP thường được sử dụng để thao tác cấu trúc dữ liệu loại danh sách và có một bộ công cụ đầy đủ trong này liên quan sẽ hữu ích.

5
Orbling

Quá tải toán tử:

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

Hỗ trợ tập tin lớn. Khá vui lòng?

Xem http://bugs.php.net/orms.php?id=27792 (mặc dù có thể có nhiều khu vực/chức năng cũng cần được chú ý).

4
Don MacAskill

Thêm ngoại lệ thay vì tạo E_WARNING ... Thật khó chịu khi tôi không thể sử dụng thứ gì đó như:

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();
}

Tất nhiên, hiện tại không thực tế lắm nhưng rất khó nhận:

CẢNH BÁO

CẢNH BÁO

CẢNH BÁO

và tôi không thể kiểm soát luồng mã mà không viết error_handler của riêng mình và đánh hơi chuỗi lỗi nào đã được tạo ra (quyền, tên tệp không chính xác hoặc bất cứ điều gì khác; Tôi không bận tâm về các nguồn lỗi khác ở đây) để đưa ra ngoại lệ chính xác .

Tôi hy vọng tôi không giải thích được tại sao nó quan trọng.

PHP đã trở thành Hướng đối tượng một thời gian trước đây và chúng tôi, những lập trình viên sử dụng PHP, đang mong chờ các tính năng OO, không giới thiệu "goto" ... Khi tôi phát hiện ra nó thực sự rất vui, tôi nghĩ rằng đó là một ngày cá tháng tư.

4
eRIZ
  1. Hợp nhất mô hình đối tượng - làm cho tất cả các đối tượng mở rộng lớp Object cơ sở. Lớp Object sẽ (trong số những thứ khác) thực hiện tất cả các phương thức ma thuật (vì vậy chúng sẽ không còn là phép thuật nữa!)

  2. Di chuyển các tiện ích mở rộng sang không gian tên của riêng chúng - giải nén không gian tên toàn cầu $conn = new \MySQLi\Connection();

  3. Hủy làm tê liệt chức năng spl_autoload()! Nghiêm túc mà nói, đây có thể là một trong những tính năng tuyệt vời nhất của PHP và cũng là thứ vô dụng nhất cùng một lúc. spl_autoload là trình tải tự động mặc định, hỗ trợ không gian tên và nhiều phần mở rộng tệp, nhưng vì một số lý do không xác định, yêu cầu tên tệp phải được hạ xuống. Có một báo cáo lỗi được điền cho điều này , nhưng nhân viên trả lời họ sẽ không sửa nó vì tính tương thích ngược. Phải ... nó không giống như mọi khung công tác với trình tải tự động của riêng nó, vì cái mặc định bị tê liệt!

4
Mchl

Mang hỗ trợ mờ lên phiên bản mới nhất và đưa nó vào các bản dựng tiêu chuẩn, tốt nhất là bật trong cấu hình mặc định http://wiki.php.net/rfc/taint

Điều này sẽ ngăn chặn các cuộc tấn công tiêm XSS và SQL bằng cách làm cho mọi người viết mã đúng.

4
rjmunro

Chú thích cho PHP sẽ rất tuyệt, Một tính năng sẽ nổi bật trong những năm tới. Tính năng này sẽ giúp viết các khung lớn với mã sạch.

3
user10916

Tôi muốn xem mệnh đề else cho while, forforeach. Ví dụ.:

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

Khối else chỉ được thực thi nếu điều kiện cho whilekhông bao giờ true.

Điều này sẽ khiến bạn không cần phải theo dõi các cờ Boolean và có lẽ nó có thể giúp bạn suy nghĩ về các trường hợp ranh giới và các điều kiện lỗi có thể xảy ra.

3
Macneil

Đừng loại bỏ các thẻ mở ngắn, đặc biệt là echo one = (. This:

<?=$myvar?>

... là cách tốt hơn thế này:

<?php echo $myvar;?>
3
dukeofgaming
  1. Tuy nhiên, một ngày nào đó tôi muốn xem loại dữ liệu - Tôi cũng thích sự đơn giản của việc không phải xử lý các loại dữ liệu, đây là con dao hai lưỡi đối với tôi.
  2. không gian tên!
  3. Các hàm gọi quá tải với các chữ ký phương thức khác nhau
  4. Hỗ trợ tốt hơn cho kiểm thử đơn vị và tiêm mã, PHPUnit là một công cụ tuyệt vời, cũng như khung tiêm mã Symfony làm nên điều kỳ diệu ... tuy nhiên tất cả đều đi kèm với đường cong học tập của riêng họ.
3
cdnicoll

Dường như không ai đề cập đến một tùy chọn loại an toàn.

Thật tuyệt vời khi có thể viết mã như thế này:

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

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

Một vi dụ khac:

<?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

Cho phép không gian tên một tệp từ cuộc gọi bao gồm, một cái gì đó như thế này

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

hoặc là

include 'mytemplate.php' use MyNamespace;

Và bắt đầu cho phép chúng tôi nhập không gian tên ("sử dụng") mà không có tiền tố:

use OtherNamespace as self;

(thay vì phải nhập từng lớp riêng lẻ để sử dụng nó mà không có tiền tố không gian tên)

2
user11122
  • Không chặn truy vấn SQL (Giống như chèn một số nhật ký, nhưng đừng đợi kết quả của truy vấn)
  • Truy vấn SQL song song

chỉ la giâc mơ

2
Erlango

Máy phát điện. Như trong Python, với năng suất.

2
ts01

Khả năng ném ngoại lệ trong __destructor hoặc __toString. Và, thực sự, có bất kỳ lời giải thích tại sao nó không thể?

2
ts01

Sẽ rất tốt nếu có khả năng thiết lập kiểu nguyên thủy (bool | boolean, int | số nguyên, float, double, chuỗi, object) của một tham số trong một phương thức khi mảng được cho phép.

Thí dụ:

  • hiện hành:

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

    }

  • mong:

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

Tôi cũng nghĩ rằng có một lớp tĩnh Assert có thể hữu ích.

2
user11251

hỗ trợ gợi ý loại cho tất cả các loại và phương thức ma thuật _toXXX cho mọi loại có thể. (php sử dụng phổ biến trôi dạt IMHO thay vì hạn chế tung hứng kiểu/với một số ngoại lệ, chẳng hạn như float hội tụ <-> int /)

2
ts01

Chắc chắn phương thức nạp chồng bằng cách sử dụng gợi ý kiểu để phân biệt chữ ký phương thức. Hơn nữa, tôi muốn thấy một số loại "thuộc tính" kiểu ASP.NET, để các trình điều khiển của tôi hoạt động trong một PHP MVC framework có thể trông như thế này:

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

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

PHP cần một lớp chuỗi Unicode bất biến. Đảm bảo các chuỗi đầu vào là hợp lệ, UTF-8 được chuẩn hóa và nó vẫn hợp lệ nên không đáng kể.

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

Tôi đã tạo nguyên mẫ dựa trên PHP-UTF8 .

2
Steve Clay

Chữ viết tắt regrec gốc, kiểu Perl qw{}, qq{}q{}.

Phương thức chuỗi gọi cho tất cả các đối tượng: $object{ ->method1(); ->method2(); ->getPerson()->getName(); }

Biểu thức tuyên bố: ({echo $a; $a = $a + 1; $a})

XÁC NHẬN, KHÔNG CÓ THỂ XÁC NHẬN, KHÔNG THỂ BẮT ĐẦU short_open_tags. Nếu chúng không thể định cấu hình, PHP sẽ dễ mang theo hơn. Xem những gì bao gồm ERB - thẻ kiểu

1
Ming-Tang
  • Tôi muốn xem một số cách riêng để đặt open_basingir trong các máy chủ ảo dựa trên tên miền tự động, mà không phải định cấu hình một lệnh cho mỗi Máy chủ (tương tự như bản vá Jason Greene, nhưng bản địa).

  • Xin vui lòng, toàn cầu ứng dụng! Các biến toàn cục của ứng dụng sẽ có sẵn cho tất cả các tập lệnh php, sau khi được khởi tạo.

  • Một số cách để phát hành phiên cho các chủ đề khác, mà không đóng chúng:

[.__.] session_start (); [.__.] $ _ SESSION ['favcolor'] = 'trắng'; [.__.] session_flush (); // phiên hiện được bỏ chặn để các chủ đề khác có thể sử dụng nó [.__.] // vòng lặp lớn ... [.__.] $ _ SESSION ['tast'] = 'sweet'; // khối phiên tự động trở lại [.__.] session_close (); [.__.]
  • Có thể một số bộ đệm trên đĩa sẽ đẹp, vì vậy chúng tôi có thể biên dịch trước các tập lệnh php để thực thi nhanh hơn. Tương tự như bộ nhớ đệm, nhưng với các tệp trên đĩa và tạo thủ công (có thể sử dụng một số phần mở rộng tệp mới).

  • Ngoài ra, một cái gì đó tương tự với <? Php = $ biến?> Làm lối tắt đến <? Php echo $ biến; ?> sẽ là Nice (như trong thẻ asp, nhưng với các thẻ short/asp bị tắt).

1
Bacco

và, rõ ràng, get_shutdown_fifts () và unregister_shutdown_function (). Hiện tại không có cách nào để xác nhận điều đó. Và nói chung, một số hỗ trợ trừu tượng cho ngăn xếp gọi lại - một cái gì đó để hợp nhất spl_autoloads, chức năng tắt máy, trình xử lý lỗi (hiện không thể xếp chồng, nhưng có thể ...), v.v. ngăn xếp được xác định trước ('tự động tải', 'tắt máy', 'lỗi' ...) được gọi bởi php hoặc bởi chính người dùng.

1
ts01

thêm các trình bao bọc đối tượng cho các tiện ích mở rộng bằng cách sử dụng tài nguyên (curl, ftp, Gd2 ...). Giống

 $oFtp = new Ftp();

 $oFtp->connect();

 $oFtp->close();
1
ts01
  • phạm vi từ vựng cho lambdas (sử dụng từ khóa khác sau đó hoạt động) (hoặc cú pháp chặn để tạo phạm vi từ vựng phù hợp?)
  • làm cho lambdas trong các thuộc tính đối tượng có thể gọi
  • luôn luôn ngụ ý dấu chấm phẩy với niềng răng đóng lambda
  • thêm sử dụng () cho các chức năng bình thường !!
  • đặc điểm
  • khả năng chặn instanceof/is_a ()
  • máy phát điện
  • mở ra Ngoại lệ để sửa đổi thời gian chạy
  • một chức năng để kiểm tra các giao diện mà không thực hiện nó
1
alan blaire

Hai phiền toái đầu tiên của tôi không liên quan đến PHP, nhưng với các quy ước sử dụng ngụ ý của nó.

  1. 'Phần mở rộng tên tệp' cho mã thư viện (ví dụ: PEAR/Horde/Zend/v.v.) sẽ kết thúc vào .phps Thay vì .php. Lợi ích của việc này là nó phân tách rõ ràng mã để chạy và mã để bao gồm, cũng như tùy chọn tất cả mã (của bạn) có thể đọc/duyệt được từ máy chủ. Là một phần thưởng, spl_filename_extensions() có thể được sử dụng trong trình tải tự động của bạn để thuận tiện cho người khác.

  2. Quy ước (trong các tài liệu) là :: Được sử dụng cho cả phương thức tĩnh cũng như phương thức tĩnh, tôi sẽ cảm ơn nếu họ sử dụng :: Cho tĩnh và -> đồ đạc. Như một quy ước tốt, vẫn sẽ có chỗ cho lỗi liên quan đến giải thích, nhưng ít nhất thì rõ ràng hơn.

Để đặt tên cho một số, tôi cũng muốn xem như sau:

  1. Reflection * 'getDocVer (hoặc có lẽ là một biến thể khác của tên hoặc đối số) nên tự do hơn và cũng chỉ nhận được các nhận xét đầu tiên (cho đến khoảng trắng) phía trên loại được đề cập. Nói cách khác: Tôi không thích tài liệu dài dòng (đọc: ăn theo dòng) trong khi tôi thực sự chỉ muốn có thể cung cấp mức tối thiểu ở bất kỳ loại bình luận nào: //, # hoặc /* ... */.

  2. Danh sách các không gian tên được sử dụng, ví dụ: getdefinednamespaces().

  3. Hành vi của 'hằng số không xác định' nên có thể thay đổi bằng lệnh ini, ví dụ: một chuỗi rỗng hoặc lỗi nghiêm trọng. Tuy nhiên, nó không bao giờ nên được chuyển đổi hoàn toàn thành một chuỗi! (nó giống như; trong javascript).

  4. Hằng số __CLASS__ Cũng sẽ tự động hoạt động như thế này (được gọi là tĩnh) stdClass::__CLASS__ == '\stdClass'. Nói cách khác, thay vì đề cập đến một lớp bằng một chuỗi, tôi muốn sử dụng một lớp và hằng số ma thuật của nó __CLASS__ Để tham chiếu đến nó. (vâng, nó là một idefix)

  5. Nhập phương thức đúc và phép thuật __fromType($instancetype)__toType($type). Vì vậy, một đối tượng có thể được truyền tới một số nguyên: $y = (int) $x hoặc tới một đối tượng khác $y = (BeanWrap) $x. Tuy nhiên, việc thực hiện điều này có nghĩa là trong số mười hai phôi có sẵn bao gồm tám loại khác nhau, tên của các phôi này không thể được sử dụng làm tên lớp (ví dụ: int, binary, boolean) nữa.

1
23JUL

Khi tôi nhìn thấy chủ đề này, tôi nghĩ rằng nó sẽ hữu ích để đề cập đến một số bài viết tôi chạy vào.

  1. Sắp xếp Groovy Groovy? toán tử trong PHP: http://justafewlines.com/2009/10/groovys-operator-in-php-sort-of/
  2. Cải thiện việc đóng cửa: http://justafewlines.com/2009/10/whats-wrong-with-php-closures/
1
Alexey Shein

Đủ khôn ngoan để không phá vỡ tính tương thích ngược. Tôi đã học được sự tồn tại của goto như một từ khóa một cách khó khăn, tôi đã sử dụng nó làm tên phương thức, vì vậy một bản cập nhật mã cho php 5.3 mất 2 hoặc 3 giờ.

Một cái gì đó giống như vai trò cho các lớp sẽ là một bổ sung tốt cho hệ thống đối tượng. Không có gì phức tạp.

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

Điều này sẽ chọn phương thức phương thức từ lớp xyz và tất cả các phương thức từ lớp uvm.

Cuộc gọi của người xây dựng nên được sử dụng như một đối tượng ngay sau khi tạo.

new goodie()->youp();
1
giftnuss
  1. Hãy để vô hướng được đối xử như các đối tượng. Nếu tôi cố gắng làm $ vô hướng-> toLower (); tại sao nói với tôi là tôi sai Tại sao không tạm thời chuyển nó thành một loại như kiểu đối tượng "vô hướng" và sau đó chuyển sang "phương thức không xác định" (có lẽ không làm điều này là null)?

  2. Xóa tài nguyên khỏi không gian người dùng. PHP hiện có các đối tượng. Mọi thứ bây giờ là tài nguyên có thể nằm trong trình bao bọc đối tượng che giấu nó như một tài sản riêng. Chức năng có thể cần phải được thêm cho __s ngủ () và __wakeup (). có thể dễ dàng được tạo lại ở trạng thái "tương tự". Ngay cả khi chúng không thể, đối tượng PDO không thể được nối tiếp: Tôi cho rằng điều tương tự có thể được thực hiện với các đối tượng khác.

  3. Hãy để cộng đồng PHP thực tế bỏ phiếu bằng mã của họ: cho phép chúng tôi xác định lại các phương thức, lớp và hàm hiện có. Mã xấu sẽ bị thối, giống như trong Javascript. Nó sẽ cho phép mọi người bằng cách sử dụng PHP tìm ra những gì họ cần thay vì phải đoán tất cả thời gian. Các chức năng và chức năng được sử dụng/ghi đè những khả năng cần được xem xét nhất.

    Điều này cũng có tác dụng phụ là liên quan đến cộng đồng PHP với các vấn đề UTF (hy vọng là UTF-8). Thay vì có cài đặt toàn hệ thống bật hoặc tắt unicode, PHP nhà phát triển có thể ghi đè chức năng họ cần cho ứng dụng của họ.

  4. Tạo _ một dấu phân cách không gian tên. Mọi người đã sử dụng nó kể từ PHP5, cho phép mọi người xây dựng mã của họ thay vì viết lại nếu for PHP 5.3. Tôi không biết sự phức tạp của nó. Tôi biết ban đầu có một số suy nghĩ về mã đó có các tên lớp như Zend_Exception: Cho phép nó, nhà phát triển sẽ luôn phải truy cập nó dưới dạng Zend_Exception hoặc\Zend\Exception và không bao giờ Ngoại lệ. Hãy coi nó là tên đầy đủ thay vì chỉ là một phần.

  5. OOP: lấy một số gợi ý từ Javascript/Actioncript/Python. Các đặc điểm có vẻ đầy hứa hẹn, nhưng thay đổi kiểu động trong thời gian chạy sẽ rất tuyệt vời.

  6. Thuộc tính: Tôi thấy các cuộc đàm phán đang được thực hiện về các thuộc tính, vui lòng triển khai chúng một cách linh hoạt. PHP được coi là một ngôn ngữ động. Chúng ta sẽ có thể định nghĩa các thuộc tính (chỉ là về mọi thứ) trong thời gian chạy.

  7. Đối xử với hằng số như những gì họ sử dụng cho: biến toàn cục. Các lớp/Chức năng/Không gian tên đều phù hợp với dự luật này. Có lẽ khi mọi người bắt đầu nhận ra rằng tất cả họ đều là người toàn cầu ngay bây giờ, sẽ có nhiều ý tưởng hơn để khắc phục vấn đề có quá nhiều biến/hằng toàn cầu.

  8. Biên dịch JIT: Javascript có thể làm điều đó và cực nhanh. PHP là một trong số ít những người đứng sau trong số này.

  9. PHP được cho là được tối ưu hóa cho "Siêu văn bản", nhưng không có cách nào dễ dàng để thoát đầu ra như vậy. Cá nhân, tôi xác định lại 'in' để thực hiện một htmlspecialchars (). Nhìn chung, nó có thể chỉ cần là một printh hoặc echoh.

  10. Đơn giản hóa php.ini. php.ini dành cho Quản trị viên hệ thống, không phải nhà phát triển. Loại bỏ sự không tương thích của các thẻ ngắn, sửa chúng hoặc xóa chúng. Thật khó chịu cho các quản trị viên hệ thống khi có thể bật/tắt các tính năng của ngôn ngữ cho toàn bộ hệ thống. Và làm việc xung quanh họ khi cố gắng phân phối phần mềm.

  11. Cho phép PHP nhà phát triển tồn tại sau khi chu kỳ yêu cầu kết thúc (đối với FastCGI và Apache). Đưa ra điều này qua API. Cho phép quản trị viên hệ thống vô hiệu hóa hoặc giới hạn điều này. (Yêu cầu chương trình php trả lại quyền kiểm soát cho người điều phối trong vòng 10 giây hoặc nó mất trạng thái liên tục).

  12. Biến PHP thành ngôn ngữ lập trình chung. <? Thẻ php gây khó chịu: làm cho nó không bắt buộc khi bạn phát hiện a! #/...

  13. Shortand để tạo các đối tượng {} và mảng [], Taje nhìn vào PiHiPi , họ thực hiện điều này và rất nhiều loại đường cú pháp đơn giản khác.

    14: Cho phép [] truy cập các thuộc tính và chức năng trên các đối tượng. Chức năng và Lớp học là công dân hạng nhất bây giờ, phải không? Tạo [] cách thực tế (như javascript/Actioncript) để truy cập mọi thứ một cách linh hoạt trên các đối tượng.

  14. Cho phép PHP mã thành PHP. Tôi không cần phải học C chỉ để thư viện của tôi có sẵn trên toàn hệ thống trong nhiều quy trình. Hãy để = PHP cộng đồng tìm hiểu thêm về điều này.

  15. Thay vì lấy ý tưởng từ Java/C, hãy lấy chúng nhiều hơn từ các ngôn ngữ động như Javascript, Actioncript và Python. Chức năng cụ thể hơn được liệt kê dưới đây.

  16. Lỗi nghiêm trọng: tại sao hầu hết các lỗi vẫn không thể phục hồi? Tôi thích khái niệm lỗi đăng nhập trong một tệp nhật ký (được thực hiện ở mức rất cao). Những gì tôi không thích là luôn luôn nghe về một "trang trắng". Tôi thực hiện nhiều kiểm tra và khai báo trong mã của mình để tránh những điều này: nhưng khi ai đó chuyển null thành một đối tượng cho hàm của tôi, thần cấm rằng PHP có thể phục hồi sau thảm họa đó mà không thực hiện Tôi tự làm is_null (). Chắc chắn đó là một lỗi, có vẻ như thật ngớ ngẩn khi hầu hết các ngôn ngữ khác gọi đây là NullReferenceError/Exception có thể được xử lý và trình bày không chỉ là màn hình trắng.

    Ít nhất, ngừng thêm các lỗi nghiêm trọng. Tôi có khả năng nâng cấp nhiều máy chủ đang chạy PHP 5.2, nhưng tôi không thể: vì tôi không có thời gian để đi qua ~ 200 trang web trên mỗi máy chủ để sửa mã cũ Bạn càng thêm ít lỗi nghiêm trọng mới, bạn càng có nhiều khả năng đưa mọi người lên tàu với các phiên bản mới của PHP.

    Loại bỏ càng nhiều lỗi nghiêm trọng khỏi ngôn ngữ càng tốt. PHP được coi là một ngôn ngữ động: tại sao mọi ngôn ngữ khác có thể phục hồi từ hầu hết các lỗi PHP xem xét gây tử vong? chương trình buộc phải chết sau khi hầu hết các ngôn ngữ coi là NullReferenceException.

  17. Làm cho ngoại lệ trở lại. Vì vậy, chúng ta có thể dễ dàng xen kẽ các ngoại lệ và lỗi.

  18. (Mất nhiều thời gian nhất và không có khả năng) Phân tách thảo luận ngôn ngữ, thảo luận API/mô-đun và thảo luận về thông dịch viên. Chúng không nên được tích hợp như bây giờ. Các vấn đề với trình thông dịch hiện tại nên được tìm ra sau cùng. Pypy/Parrot/JVM đều hỗ trợ nhiều ngôn ngữ. V8 không, nhưng đủ nhanh để một số người đang làm việc để biên dịch các ngôn ngữ khác thành JavaScript để chạy trên V8 và tận dụng các khả năng của nó.

    Là người phiên dịch/runtime/vm, các mục tiêu phát triển hơi khác so với ngôn ngữ. Với PHP, cảm giác như thể chúng là một trong cùng. Vì vậy, những người cố gắng phát triển các trình thông dịch khác đang gặp khó khăn trong việc theo kịp các cuộc thảo luận khi tất cả các cuộc thảo luận về thiết kế ngôn ngữ được trộn lẫn với các cuộc thảo luận về trình thông dịch PHP.

    Là một thông dịch viên, tôi cảm thấy rằng càng nhiều ngôn ngữ thì phiên dịch viên hỗ trợ càng tốt. Tại sao chúng ta không thể có <? Python hoặc <? Javascript hoặc <? Actioncript. Tôi mệt mỏi với việc viết lại mã bằng ngôn ngữ khác vì vậy tôi có thể sử dụng nó ở đó. Một số người đã cố gắng làm điều này, có khả năng sẽ tăng cường hỗ trợ từ các khu vực khác trong cộng đồng.

1
Reece45

Tính năng số một của tôi sẽ là

toán tử nạp chồng

Theo tôi, một tính năng định kỳ được yêu cầu ở đây, cụ thể là các kiểu gốc làm đối tượng, có thể được sửa bằng cách tạo các lớp trình bao bọc của riêng bạn. Tôi đã phát triển cho các dự án của mình một đối tượng ArrayData, một đối tượng stringData, một đối tượng intData, v.v ... Điều này giải quyết:

  • Gõ mạnh: vì đó là các lớp tùy chỉnh, chúng có thể được thi hành
  • Kiểu nạp chồng: Tôi có thể thêm bất kỳ phương thức nào tôi cần vào lớp ArrayData của mình
  • Chuyển đổi loại: mỗi lớp của tôi có các phương thức -> toArray (), -> toInt (), -> __ toString (), v.v.
  • html thoát trong các mẫu (chuỗi là lớp userStringData mở rộng lớp stringData).
  • các giá trị luôn được truyền bằng tham chiếu trừ khi được hướng dẫn khác
  • tạo một intData ('chuỗi') ném một ngoại lệ.
  • vv (danh sách các lợi ích vẫn còn rất dài)

Imho, điều này có lợi hơn các kiểu bản địa như các đối tượng, vì bạn có thể có số lượng chính xác các phương thức bạn cần và gọi chúng theo ý thích của bạn.

Nhưng điều tôi nhớ rất nhiều là khả năng sử dụng các toán tử riêng trên các đối tượng của tôi. Tôi có thể sử dụng toán tử [] nhờ mảngAccess. Nhưng tôi không thể sử dụng "+", "-", v.v. Nếu tôi có thể, thì tôi có thể thực hiện chuỗiData + stringData (tương đương với $ chuỗi. ', $ string)) hoặc so sánh các loại của tôi với ">" và "<=" ...
[.___.] Việc triển khai hiện tại của tôi sử dụng $ intData-> add ($ n), $ intData-> sub khu vực ($ n), v.v. Cồng kềnh, đặc biệt trong các chức năng mà bạn có thể mong đợi một đối tượng int hoặc đối tượng intData. Điều đó có nghĩa là tôi phải kiểm tra với instanceOf bên trong mỗi hàm.

Nói cách khác, mặc dù các lớp học của tôi đã sẵn sàng, được tối ưu hóa và Nice, cho đến khi tôi có thể quá tải các toán tử, chúng không khác gì một bằng chứng về khái niệm. Sử dụng chúng trong một dự án thực tế là gây phiền nhiễu.

0
Xananax

Tiếp xúc số tham chiếu zval. (Vâng, chúng tôi có thể sử dụng xdebug_debug_zval , nhưng cho phép Xdebug trên trang web trực tiếp, ick.) chịu trách nhiệm sửa đổi các tài nguyên đó. Có hai biểu diễn đối tượng riêng biệt cho cùng một tài nguyên sẽ rất tệ (mất dữ liệu do ghi xung đột, v.v.), vì vậy chúng tôi cần một số loại bộ đệm có thể trả về mô hình cho tài nguyên được yêu cầu nếu nó đã được tải. Tuy nhiên, điều đó sẽ giết bộ sưu tập rác: tham chiếu cuối cùng đến đối tượng mô hình sẽ luôn ở trong bộ đệm, do đó, việc lặp qua một tập hợp tài nguyên lớn như truy vấn DB lớn hoặc thư mục lớn sẽ nhanh chóng chiếm hết bộ nhớ. Điều này có thể tránh được nếu cửa hàng đối tượng có thể được kiểm tra xem chỉ có một tham chiếu duy nhất đến đối tượng được lưu trữ (chính cửa hàng đó) và phá hủy nó nếu đó là trường hợp.

0
Tgr

Tôi cần một số tính năng erlang trong php:

  • tải mã nóng
  • nguyên tử
  • khớp mẫu (bao gồm tên hàm, câu lệnh khớp như: case of)

Làm việc với mã byte: lưu, tải, xóa và vv ...

Hệ thống nhúng linh hoạt

0
Dan

Tôi thích sự tiến bộ và khả năng mở rộng của php trong những ngày gần đây.

Các tính năng mới được giới thiệu trong Java chỉ làm cho mọi thứ trở nên phức tạp hơn sau đó làm cho nó trở nên đơn giản.

yêu cầu 1: cơ sở hồ bơi kết nối db làm thư viện bổ sung.

yêu cầu 2:

Tôi đang yêu cầu lập trình ngược ajax hoặc sao chổi hoặc cơ sở RTMP dưới dạng thư viện tích hợp. Những thứ này đã được phát triển cho .net, Java, python và Perl bởi nền tảng dojo

Chúng tôi có những thứ tương tự trong php nhưng không phải là một giải pháp hoàn chỉnh.

  1. Ngoài ra còn có hỗ trợ cho mẫu quan sát viên trong SPL. nhưng không được ghi chép đúng.
  2. Khung Xajax (tốt nhưng yêu cầu thiết kế lại ứng dụng)

tạm biệt.

0
Shashank

vài điều sẽ làm cho ngày của tôi

  • Các quy ước đặt tên Sane cho các hàm tích hợp.
  • Nhập gợi ý cho chuỗi và số
  • Gợi ý kiểu trả về
  • E_STRICT theo mặc định
  • Đặc điểm, mixin và nhiều kế thừa
  • Mọi thứ đều là một vật thể (tức là độ tinh khiết giống như Ruby)
  • Thêm :: hỗ trợ cho không gian tên
  • Hỗ trợ windows tốt hơn
  • Kiểm tra ra khỏi hộp
  • Tài liệu tốt hơn cho phần dưới của exec ()
  • Thiết kế lại php.net với tìm kiếm trực tiếp
  • Xdebug thích chức năng ra khỏi hộp
  • Cải thiện PEAR tính di động - người dùng của Ruby đá quý nên biết
0
Grayson

Tôi thực sự muốn có chú thích .. afaik rằng RFC đã bị loại bỏ.

0
crystal88_
  • Hỗ trợ UTF-8
  • Làm cho ngôn ngữ hoàn toàn OO, mượn Ruby và Python khái niệm rằng mọi thứ đều là một đối tượng. Tôi khá thích rfc tự động. Tuy nhiên, nó mang lại quá nhiều tự do Đối với các nhà phát triển không tốt. Nhưng với một số hạn chế, đó có thể là một bổ sung tốt cho sự phát triển ngôn ngữ.

$ x = mảng (5, 60, 50, 50); $ x-> map (hàm ($ i) {return $ i * 2;}) -> Đẩy (10);

$ p = "một số chuỗi"; $ q = $ p-> chuỗi con (0, 10);

vân vân.

Theo ý kiến ​​của tôi, điều này có thể được thực hiện mà không phá vỡ các chức năng toàn cầu hiện tại. Tuy nhiên, hầu hết trong số họ sẽ trở nên vô dụng và có thể bị từ chối theo thời gian.

  • Ký hiệu ngắn cho mảng sẽ rất hay, nhưng nó không quan trọng đối với ngôn ngữ.
0
Josh Scott

Sẽ thật tuyệt khi có thể sử dụng một lớp mở rộng lặp trong vòng lặp foreach, nơi bạn chuyển một tham chiếu đến vòng lặp:

[.__.] foreach (& $ mygroup là $ me) {[.__.] echo $ me; [.__.]} [.__.]

Tôi đã không dành nhiều thời gian để tìm hiểu lý do tại sao nó không hoạt động, có lẽ nó liên quan đến cách lặp lại hoạt động, tôi đã không điều tra nhiều hơn là chỉ nhận thấy rằng nó không hoạt động.

0
gabe.

Gọi hàm nhanh hơn

Chúng ta có call_user_func($f,$a1,$aN), nhưng nó đã được thay thế bằng $f($a1,$aN). Tuy nhiên, không có điều đó cho call_user_func_array($f,$args).

Đề xuất của tôi là tạo một cú pháp ngôn ngữ cụ thể cho việc này, chẳng hạn như $f{$args}. Lý do tất cả mọi người nên tránh xa call_user_func* Là vì ​​họ cực kỳ chậm chạp và xấu xí theo nghĩa là có những lựa chọn thay thế tốt hơn.

Cú pháp giải mã đối tượng

Ngay bây giờ, để tạo một đối tượng nhanh chóng, bạn cần: (object)array('prop'=>'value');. Theo quy ước, chúng ta cũng nên có object('prop'=>'value');. Ngoài ra, các cú pháp ngắn sẽ có ích, tương tự như JSON.

Một phương thức ma thuật be-all-end-all cho các loại

Ngay bây giờ, chúng tôi có __toString() và nhiều đề xuất __toInt/__toFloat/Vv. Lời khuyên của tôi sẽ là triển khai __toType() hoặc __typecast(), với tư cách là một tham số đầu tiên, kiểu dữ liệu mong muốn được thông qua, ví dụ:

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

Nếu chúng ta muốn cụ thể hơn, chúng ta có thể thêm một đối số khác sau kiểu $, cụ thể là $ class. Vì vậy, bạn có thể: if($class=='person')return new Person($this->age);

Chỉ định kiểu dữ liệu trong foreach

Hiện tại, bạn có thể chỉ định loại dữ liệu của a PHP, như vậy:

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

Nó sẽ là tuyệt vời để làm điều này trong một bài giảng:

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

"Sửa" hiện tại đang sử dụng một bao đóng, như vậy:

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

Bản sửa lỗi chiếm nhiều tài nguyên hơn, viết nhiều hơn và làm rối phạm vi, do đó, tại sao một giải pháp gốc sẽ giúp nó dễ dàng hơn, sạch hơn và có thể nhanh hơn bản sửa lỗi hiện tại.

Xác định có điều kiện

Đây có lẽ sẽ không phải là một tính năng hữu ích cho nhiều người, nhưng nó là một cách tuyệt vời để giữ mã chạy ở mức tối thiểu ngay cả khi nó tương thích với các hệ thống cũ, giúp thực thi nhanh hơn. Hãy xem xét các mã sau đây:

if (! function_exists ('json_encode')) {function json_encode ($ value, $ Options = 0) {// mã kế thừa}}

  • Phần // legacy code Vẫn được phân tích cú pháp, do đó, bất kỳ lỗi nào trong đó sẽ khiến PHP thoát ra.
  • Phân tích cú pháp nó cũng làm cho PHP chậm hơn, ngay cả khi nó không cần nó.
  • Mã này không trực quan cho các nhà phát triển
  • Bất kỳ công cụ phân tích cú pháp nào IDE sẽ bị lẫn lộn vì chúng bỏ qua nếu các câu lệnh và kết thúc việc liệt kê hàm hai lần.

Cách khắc phục? Biên soạn có điều kiện:

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

bao gồm hỗ trợ liên kết siêu văn bản tốt hơn, tức là một phương thức chức năng/lớp có thể được sử dụng để thay đổi uri hiện tại của trình duyệt. hoặc để tạo ra một cái hoàn toàn mới. sử dụng $ _SERVER ['REQUEST_URI'] || $ _SERVER ['PATH_INFO'] để hiểu tài nguyên được yêu cầu. Điều này có thể làm cho một cái gì đó như phát triển ứng dụng REST dễ dàng hơn. (theo UriScheme của rfc và đó là triển khai chương trình mặc định, có thể giúp triển khai các UriScheme khác mở rộng UriBase)

Cung cấp một cái gì đó giống như một lớp UriResource, cho phép yêu cầu các đoạn chức năng nhỏ theo cách cũng có thể mang lại lợi ích cho các yêu cầu http từ máy khách.

Tạo một hàm có thể được gọi trước và sau một mẫu, cho phép các thẻ ngắn giữa hai lệnh gọi hàm đó. Giữa các lệnh gọi hàm đó, các biến duy nhất được tạo sẵn là các biến được truyền cho lệnh gọi hàm đầu tiên (dưới dạng mảng kết hợp (sử dụng trích xuất)). Điều này có thể dễ dàng phát triển khuôn mẫu trong chính php (khung không có khung). Khung không có khung PHP Khung MVC

Nói chung, tôi nghĩ rằng nhiều khung công tác php ngoài kia có những điểm tương đồng nhất định có thể dễ dàng được tích hợp vào php theo cách phổ biến.

nhưng aiami :)

0
immeëmosol
  1. Đối tượng giá trị bất biến
  2. Các lớp ẩn danh và/hoặc các lớp làm đối tượng
  3. Đối tượng dựng sẵn tương đương với kiểu dữ liệu chuỗi (đã đề cập trước đó)
  4. Chú thích hoặc trang trí giống như Python
  5. Đối tượng Singleton như trong Scala
  6. Lỗi mặc định là ngoại lệ (đã đề cập trước đó)
  7. Hỗ trợ UTF8
  8. Loại bỏ toàn cầu vv
  9. Nguyên tắc truy cập hợp nhất - một cách để gọi các phương thức đối tượng và thao tác phù hợp (xem Scala)
0
sokzzuka