2015-07-18 20 views
5

Làm cách nào để biết mã của mình phiên bản ngôn ngữ nào tương thích? Có cách nào để tìm ra đó là phiên bản tối thiểu của ngôn ngữ PHP có thể thực thi nó mà không có lỗi? Có thể có một số Checker hoặc một hàm, phương thức, class?Kiểm tra khả năng tương thích phiên bản PHP

+2

Cũng có thể có phiên bản tối đa của ngôn ngữ PHP có thể thực thi nó mà không có lỗi. – hellcode

+1

Ok nhưng làm thế nào để biết tương thích của mình? –

+0

Hoặc bạn biết mã của mình và bạn sẽ kiểm tra từng hàm docu liên quan đến phiên bản PHP hoặc bạn chỉ cần chạy kiểm tra cú pháp trên một số máy chủ với phiên bản bạn muốn đảm bảo tính tương thích –

Trả lời

5

Rất có thể bạn cần cài đặt các phiên bản PHP khác nhau. Sau đó, bạn có thể kiểm tra tính tương thích của mã của bạn với định phiên bản PHP sử dụng vỏ:

find . -name *.php | xargs -n1 /usr/bin/php -l 

php -l lệnh chạy PHP trong tầm kiểm soát cú pháp chế độ duy nhất. Lệnh trên sẽ kiểm tra từng tệp PHP trong dự án của bạn có tương thích với phiên bản PHP có tại/usr/bin/php hay không.

+0

Tôi sử dụng localhost ngay bây giờ. Có phần mềm nào để kiểm tra xem mã của tôi có tương thích với bất kỳ phiên bản nào không? –

+0

Hoặc bạn có thể sử dụng một lệnh duy nhất: 'tìm. -type f -iname '* .php' -exec/usr/bin/php -l {} \; ' – fboaventura

+0

ném tìm kiếm chính hoặc toán tử không xác định. -name '* .php' | xargs -n1/usr/bin/php -l hoạt động trên mac – swaveg

5

Cài đặt phiên bản PHP bạn muốn kiểm tra và chạy php -l file.php để kiểm tra xem tệp có vượt qua kiểm tra lint hay không. Nếu PHP không thể phân tích cú pháp tệp, nó sẽ cho bạn biết.

Nói chung, bạn nên biết tính năng nào có sẵn trong phiên bản nào. Bỏ qua PHP 5.3 với một số phiên bản vá cải thiện đáng kể trong một thời điểm, điều này sẽ giúp bạn biết được các tính năng nào được mang theo với PHP 5.4, 5.5, 5.6 và 7.0, và chỉ rõ ràng phiên bản đó trong composer.json.

Như gợi ý: 5.4 có cú pháp mảng ngắn và các đặc điểm, 5.5 có máy phát và finally, 5.6 đi kèm với các hàm variadic và giải nén đối số và 7.0 có loại gợi ý và loại trả về vô hướng. Nó giúp sử dụng một IDE biết về các tính năng này và cảnh báo bạn nếu bạn sử dụng một cái gì đó không được hỗ trợ trong phiên bản bạn đã chọn.

PHP đi kèm với hằng số PHP_VERSION chứa phiên bản hiện tại bạn đang chạy và có chức năng version_compare() để cho phép dễ dàng so sánh ký hiệu phiên bản như trong "cái nào lớn hơn". Điều này sẽ cho phép thực thi các phần khác nhau của mã tùy thuộc vào phiên bản, cho phép thêm các lớp tương thích cho một số thứ bạn cần nếu bạn chạy trên các phiên bản thấp hơn và sử dụng triển khai PHP (thường nhanh hơn) khi chạy trên các phiên bản mới hơn.

Ngoài ra, bạn sẽ luôn luôn vấp ngã khi có vấn đề với các phần mở rộng không được cài đặt. Đây không phải là vấn đề với bản PHP. PHP có function_exists()method_exists() để phát hiện xem bạn có thể gọi điều gì đó trước khi bạn thực hiện (và không có lỗi nghiêm trọng). Bạn có thể phát hiện tình trạng lỗi này và có một giải pháp khác hoặc thông báo cho người dùng rằng anh ta phải thêm một thứ gì đó vào bản cài đặt PHP của mình.

Tôi khuyên bạn nên sử dụng Travis CI cho các dự án nguồn mở. Về cơ bản bạn nhận được nó miễn phí, và thêm các phiên bản PHP khác nhau giống như thêm một dòng mới trong tệp cấu hình travis.yml. Họ cũng đưa ra kế hoạch cho các kho lưu trữ riêng. Bất kỳ cài đặt CI nào khác cung cấp cho bạn nhiều phiên bản PHP cũng sẽ hoạt động miễn là bạn đang chạy mã của mình trên tất cả các phiên bản PHP bạn định hỗ trợ.

Đề xuất cuối cùng: Thả hỗ trợ cho PHP 5.3 và 5.4. Các phiên bản này không được bảo trì (hoặc để lại giai đoạn khắc phục sự cố bảo mật chỉ trong 2 tháng kể từ bây giờ) và không thực sự được nhắm mục tiêu nữa.

+0

Tôi đã viết các lớp ngay bây giờ. Có phần mềm có thể quét chúng và nói rằng bạn có tương thích hay không ở máy chủ cục bộ? –

+0

Như tôi đã nói: Cài đặt PHP trong phiên bản bạn muốn kiểm tra và chạy lệnh 'php -l' để xem PHP có thể phân tích cú pháp nó hay không. – Sven

1

https://3v4l.org/

công cụ trực tuyến này cho thấy sản lượng mã của bạn trong hơn 150 phiên bản PHP khác nhau (mỗi phiên bản phát hành kể từ 4.3.0) cộng HHVM.

Không chắc chắn nếu nó đủ cho mục đích của bạn.

Các vấn đề liên quan