Điều nào sau đây có thể được thực hiện trong php?
Có rất nhiều thông tin lỗi thời trên Web khiến người dùng PHP mới lạc hướng, truyền bá các thực tiễn xấu và mã không an toàn. PHP. The Right Way là một tài liệu tham khảo nhanh, dễ đọc về các tiêu chuẩn mã hóa phổ biến của PHP, liên kết đến các hướng dẫn có thẩm quyền trên Web và những gì những người đóng góp coi là thực tiễn tốt nhất tại thời điểm hiện tại Show
Không có cách kinh điển nào để sử dụng PHP. Trang web này nhằm mục đích giới thiệu cho các nhà phát triển PHP mới một số chủ đề mà họ có thể không khám phá ra cho đến khi quá muộn và nhằm mục đích cung cấp cho các chuyên gia dày dặn kinh nghiệm một số ý tưởng mới về những chủ đề mà họ đã làm trong nhiều năm mà chưa từng xem xét lại. Trang web này cũng sẽ không cho bạn biết nên sử dụng công cụ nào mà thay vào đó đưa ra đề xuất cho nhiều tùy chọn, khi có thể giải thích sự khác biệt trong cách tiếp cận và trường hợp sử dụng Đây là một tài liệu sống và sẽ tiếp tục được cập nhật với nhiều thông tin và ví dụ hữu ích hơn khi chúng có sẵn bản dịchPHP. The Right Way được dịch ra nhiều ngôn ngữ khác nhau SáchPhiên bản mới nhất của PHP. Con Đường Đúng Cách cũng có sẵn ở định dạng PDF, EPUB và MOBI. Tới Leanpub Làm thế nào để đóng gópGiúp làm cho trang web này trở thành tài nguyên tốt nhất cho các lập trình viên PHP mới. Đóng góp trên GitHub Sử dụng Phiên bản ổn định hiện tại (8. 1)Nếu bạn đang bắt đầu với PHP, hãy bắt đầu với bản phát hành ổn định hiện tại của PHP 8. 1. PHP8. x bổ sung nhiều tính năng mới so với 7 cũ hơn. x và 5. phiên bản x. Công cụ đã được viết lại phần lớn và PHP thậm chí còn nhanh hơn các phiên bản cũ hơn. PHP 8 is a major update of the language and contains many new features and optimizations You should try to upgrade to the latest stable version quickly - PHP 7. 4 is already End of Life. Upgrading is easy, as there are not many backwards compatibility breaks. If you are not sure which version a function or feature is in, you can check the PHP documentation on the php. net website Built-in web serverWith PHP 5. 4 or newer, you can start learning PHP without installing and configuring a full-fledged web server. To start the server, run the following command from your terminal in your project’s web root
Mac SetupmacOS comes prepackaged with PHP but it is normally a little behind the latest stable release. There are multiple ways to install the latest PHP version on macOS Install PHP via HomebrewHomebrew is a package manager for macOS that helps you easily install PHP and various extensions. The Homebrew core repository provides “formulae” for PHP 5. 6, 7. 0, 7. 1, 7. 2, 7. 3, 7. 4, 8. 0 and PHP 8. 1. Install the latest version with this command You can switch between Homebrew PHP versions by modifying your 3 variable. Alternatively, you can use brew-php-switcher to switch PHP versions automaticallyYou can also switch between PHP versions manually by unlinking and linking the wanted version
Install PHP via MacportsThe MacPorts Project is an open-source community initiative to design an easy-to-use system for compiling, installing, and upgrading either command-line, X11 or Aqua based open-source software on the OS X operating system MacPorts supports pre-compiled binaries, so you don’t need to recompile every dependency from the source tarball files, it saves your life if you don’t have any package installed on your system At this point, you can install 4, 5, 6, 7, 8, 9, 00, 01, 02 or 03 using the 04 command, for example 5And you can run 05 command to switch your active PHP 7Install PHP via phpbrewphpbrew is a tool for installing and managing multiple PHP versions. This can be really useful if two different applications/projects require different versions of PHP, and you are not using virtual machines Install PHP via Liip’s binary installerAnother popular option is php-osx. liip. ch which provides one liner installation methods for versions 5. 3 through 7. 3. It doesn’t overwrite the PHP binaries installed by Apple, but installs everything in a separate location (/usr/local/php5) Compile from SourceAnother option that gives you control over the version of PHP you install, is to compile it yourself. In that case be sure to have installed either Xcode or Apple’s substitute “Command Line Tools for XCode” downloadable from Apple’s Mac Developer Center All-in-One InstallersThe solutions listed above mainly handle PHP itself, and do not supply things like Apache, Nginx or a SQL server. “All-in-one” solutions such as MAMP and XAMPP will install these other bits of software for you and tie them all together, but ease of setup comes with a trade-off of flexibility Windows SetupYou can download the binaries from windows. php. net/download. After the extraction of PHP, it is recommended to set the PATH to the root of your PHP folder (where php. exe is located) so you can execute PHP from anywhere For learning and local development, you can use the built in webserver with PHP 5. 4+ so you don’t need to worry about configuring it. If you would like an “all-in-one” which includes a full-blown webserver and MySQL too then tools such as the XAMPP, EasyPHP, OpenServer and WAMP will help get a Windows development environment up and running fast. That said, these tools will be a little different from production so be careful of environment differences if you are working on Windows and deploying to Linux If you need to run your production system on Windows, then IIS7 will give you the most stable and best performance. You can use phpmanager (a GUI plugin for IIS7) to make configuring and managing PHP simple. IIS7 comes with FastCGI built in and ready to go, you just need to configure PHP as a handler. For support and additional resources there is a dedicated area on iis. net for PHP Generally running your application on different environment in development and production can lead to strange bugs popping up when you go live. If you are developing on Windows and deploying to Linux (or anything non-Windows) then you should consider using a Virtual Machine Chris Tankersley có một bài đăng trên blog rất hữu ích về những công cụ mà anh ấy sử dụng để phát triển PHP bằng Windows Cấu trúc thư mục chungMột câu hỏi phổ biến đối với những người bắt đầu viết chương trình cho web là, "tôi đặt nội dung của mình ở đâu?" . ” Mặc dù câu trả lời này chưa hoàn chỉnh, nhưng đó là một nơi tuyệt vời để bắt đầu Vì lý do bảo mật, khách truy cập trang web không thể truy cập tệp cấu hình; Đối với mỗi nhóm, CMS hoặc khung mà một người làm việc, một cấu trúc thư mục tiêu chuẩn được sử dụng bởi từng thực thể đó. Tuy nhiên, nếu một người đang bắt đầu một dự án một mình, việc biết sử dụng cấu trúc hệ thống tệp nào có thể gây khó khăn. Paul M. Jones đã thực hiện một số nghiên cứu tuyệt vời về các thực tiễn chung của hàng chục nghìn dự án github trong lĩnh vực PHP. Ông đã biên soạn một cấu trúc thư mục và tệp tiêu chuẩn, Bộ xương gói PHP tiêu chuẩn, dựa trên nghiên cứu này. Trong cấu trúc thư mục này, 06 nên trỏ đến 08, các bài kiểm tra đơn vị phải nằm trong thư mục 09 và các thư viện của bên thứ ba, do nhà soạn nhạc cài đặt, thuộc về thư mục 20. Đối với các tệp và thư mục khác, việc tuân thủ Bộ khung gói PHP tiêu chuẩn sẽ có ý nghĩa nhất đối với những người đóng góp cho dự ánCộng đồng PHP lớn và đa dạng, bao gồm vô số thư viện, khung và thành phần. Các nhà phát triển PHP thường chọn một vài trong số này và kết hợp chúng thành một dự án duy nhất. Điều quan trọng là mã PHP phải tuân thủ (càng gần càng tốt) với một kiểu mã phổ biến để giúp các nhà phát triển dễ dàng kết hợp và kết hợp các thư viện khác nhau cho các dự án của họ Framework Interop Group đã đề xuất và phê duyệt một loạt các đề xuất về phong cách. Không phải tất cả chúng đều liên quan đến kiểu mã, nhưng những thứ đó là PSR-1, PSR-12 và PSR-4. Những đề xuất này chỉ đơn thuần là một bộ quy tắc mà nhiều dự án như Drupal, Zend, Symfony, Laravel, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium, v.v. đang áp dụng. Bạn có thể sử dụng chúng cho các dự án của riêng mình hoặc tiếp tục sử dụng phong cách cá nhân của riêng bạn Tốt nhất, bạn nên viết mã PHP tuân theo một tiêu chuẩn đã biết. Đây có thể là bất kỳ sự kết hợp nào của PSR hoặc một trong các tiêu chuẩn mã hóa do PEAR hoặc Zend tạo ra. Điều này có nghĩa là các nhà phát triển khác có thể dễ dàng đọc và làm việc với mã của bạn và các ứng dụng triển khai các thành phần có thể có tính nhất quán ngay cả khi làm việc với nhiều mã của bên thứ ba Bạn có thể sử dụng PHP_CodeSniffer để kiểm tra mã dựa trên bất kỳ đề xuất nào trong số này và các plugin dành cho trình soạn thảo văn bản như Sublime Text để nhận phản hồi theo thời gian thực Bạn có thể tự động sửa bố cục mã bằng cách sử dụng một trong các công cụ sau And you can run phpcs manually from shell 3It will show errors and describe how to fix them. It can also be helpful to include this command in a git hook. That way, branches which contain violations against the chosen standard cannot enter the repository until those violations have been fixed If you have PHP_CodeSniffer, then you can fix the code layout problems reported by it, automatically, with the PHP Code Beautifier and Fixer
Another option is to use the PHP Coding Standards Fixer. It will show which kind of errors the code structure had before it fixed them 0English is preferred for all symbol names and code infrastructure. Comments may be written in any language easily readable by all current and future parties who may be working on the codebase Finally, a good supplementary resource for writing clean PHP code is Clean Code PHP Programming ParadigmsPHP is a flexible, dynamic language that supports a variety of programming techniques. It has evolved dramatically over the years, notably adding a solid object-oriented model in PHP 5. 0 (2004), anonymous functions and namespaces in PHP 5. 3 (2009), and traits in PHP 5. 4 (2012) Object-oriented ProgrammingPHP has a very complete set of object-oriented programming features including support for classes, abstract classes, interfaces, inheritance, constructors, cloning, exceptions, and more Functional ProgrammingPHP supports first-class functions, meaning that a function can be assigned to a variable. Both user-defined and built-in functions can be referenced by a variable and invoked dynamically. Functions can be passed as arguments to other functions (a feature called Higher-order Functions) and functions can return other functions Recursion, a feature that allows a function to call itself, is supported by the language, but most PHP code is focused on iteration New anonymous functions (with support for closures) are present since PHP 5. 3 (2009) PHP 5. 4 added the ability to bind closures to an object’s scope and also improved support for callables such that they can be used interchangeably with anonymous functions in almost all cases PHP supports various forms of meta-programming through mechanisms like the Reflection API and Magic Methods. There are many Magic Methods available like 21, 22, 23, 24, 25, etc. that allow developers to hook into class behavior. Ruby developers often say that PHP is lacking 26, but it is available as 27 and 28NamespacesAs mentioned above, the PHP community has a lot of developers creating lots of code. This means that one library’s PHP code might use the same class name as another. When both libraries are used in the same namespace, they collide and cause trouble Namespaces solve this problem. As described in the PHP reference manual, namespaces may be compared to operating system directories that namespace files; two files with the same name may co-exist in separate directories. Likewise, two PHP classes with the same name may co-exist in separate PHP namespaces. It’s as simple as that It is important for you to namespace your code so that it may be used by other developers without fear of colliding with other libraries One recommended way to use namespaces is outlined in PSR-4, which aims to provide a standard file, class and namespace convention to allow plug-and-play code In October 2014 the PHP-FIG deprecated the previous autoloading standard. PSR-0. Cả PSR-0 và PSR-4 vẫn hoàn toàn có thể sử dụng được. Cái sau yêu cầu PHP 5. 3, rất nhiều PHP 5. Các dự án chỉ có 2 người triển khai PSR-0 Nếu bạn định sử dụng tiêu chuẩn trình tải tự động cho một ứng dụng hoặc gói mới, hãy xem PSR-4 Thư viện PHP chuẩnThư viện PHP chuẩn (SPL) được đóng gói với PHP và cung cấp một tập hợp các lớp và giao diện. Nó chủ yếu được tạo thành từ các lớp cấu trúc cơ sở dữ liệu thường cần thiết (ngăn xếp, hàng đợi, đống, v.v.) và các trình vòng lặp có thể duyệt qua các cấu trúc cơ sở dữ liệu này hoặc các lớp của riêng bạn triển khai các giao diện SPL Giao diện dòng lệnhPHP được tạo ra để viết các ứng dụng web, nhưng cũng hữu ích cho các chương trình giao diện dòng lệnh (CLI). Các chương trình PHP dòng lệnh có thể giúp tự động hóa các tác vụ phổ biến như thử nghiệm, triển khai và quản trị ứng dụng Các chương trình CLI PHP rất mạnh mẽ vì bạn có thể sử dụng trực tiếp mã ứng dụng của mình mà không cần phải tạo và bảo mật GUI web cho nó. Chỉ cần đảm bảo không đặt các tập lệnh PHP CLI của bạn vào thư mục gốc web công cộng của bạn Hãy thử chạy PHP từ dòng lệnh của bạn 2Tùy chọn 29 sẽ in cấu hình PHP của bạn giống như hàm 60Tùy chọn 61 cung cấp shell tương tác, tương tự như IRB của ruby hoặc shell tương tác của python. Ngoài ra còn có một số tùy chọn dòng lệnh hữu ích khácHãy viết một chương trình CLI “Xin chào, $name” đơn giản. Để dùng thử, hãy tạo một tệp có tên 62, như bên dưới 6PHP thiết lập hai biến đặc biệt dựa trên các đối số mà tập lệnh của bạn được chạy cùng. 63 là biến số nguyên chứa số đối số và 64 là biến mảng chứa giá trị của từng đối số. Đối số đầu tiên luôn là tên của tệp script PHP của bạn, trong trường hợp này là 62Biểu thức 66 được sử dụng với một số khác 0 để cho hệ vỏ biết rằng lệnh không thành công. Commonly used exit codes can be found hereTo run our script, above, from the command line 0XdebugMột trong những công cụ hữu ích nhất trong phát triển phần mềm là trình sửa lỗi thích hợp. Nó cho phép bạn theo dõi quá trình thực thi mã của mình và theo dõi nội dung của ngăn xếp. Xdebug, trình sửa lỗi của PHP, có thể được sử dụng bởi nhiều IDE khác nhau để cung cấp Điểm dừng và kiểm tra ngăn xếp. Nó cũng có thể cho phép các công cụ như PHPUnit và KCacheGrind thực hiện phân tích phạm vi mã và lập hồ sơ mã Nếu bạn thấy mình bị ràng buộc, sẵn sàng dùng đến 67/ 68 mà vẫn không thể tìm ra giải pháp - có thể bạn cần sử dụng trình gỡ lỗiViệc cài đặt Xdebug có thể phức tạp, nhưng một trong những tính năng quan trọng nhất của nó là “Gỡ lỗi từ xa” - nếu bạn phát triển mã cục bộ và sau đó kiểm tra nó bên trong máy ảo hoặc trên một máy chủ khác, thì tính năng Gỡ lỗi từ xa là tính năng mà bạn sẽ muốn bật ngay lập tức Theo truyền thống, bạn sẽ sửa đổi Apache Vhost hoặc. htaccess với các giá trị này 1“Máy chủ từ xa” và “cổng từ xa” sẽ tương ứng với máy tính cục bộ của bạn và cổng mà bạn định cấu hình IDE của mình để nghe trên đó. Sau đó, vấn đề chỉ là đặt IDE của bạn ở chế độ “lắng nghe kết nối” và tải URL 2IDE của bạn bây giờ sẽ chặn trạng thái hiện tại khi tập lệnh thực thi, cho phép bạn đặt các điểm dừng và thăm dò các giá trị trong bộ nhớ Trình gỡ lỗi đồ họa giúp dễ dàng chuyển qua mã, kiểm tra các biến và đánh giá mã so với thời gian chạy trực tiếp. Nhiều IDE có hỗ trợ tích hợp sẵn hoặc dựa trên plugin để gỡ lỗi đồ họa với Xdebug. MacGDBp là GUI Xdebug độc lập, mã nguồn mở, miễn phí dành cho Mac Có rất nhiều thư viện, khung và thành phần PHP để lựa chọn. Dự án của bạn có thể sẽ sử dụng một vài trong số chúng — đây là những phần phụ thuộc của dự án. Cho đến gần đây, PHP không có cách tốt để quản lý các phụ thuộc dự án này. Ngay cả khi bạn quản lý chúng theo cách thủ công, bạn vẫn phải lo lắng về trình tải tự động. Đó không còn là vấn đề Hiện tại có hai hệ thống quản lý gói chính cho PHP - Composer và PEAR. Trình soạn thảo hiện là trình quản lý gói phổ biến nhất cho PHP, tuy nhiên trong một thời gian dài, PEAR là trình quản lý gói chính được sử dụng. Biết lịch sử của PEAR là một ý tưởng hay, vì bạn vẫn có thể tìm thấy các tài liệu tham khảo về nó ngay cả khi bạn không bao giờ sử dụng nó Nhà soạn nhạc và PackagistTrình soạn thảo là trình quản lý phụ thuộc được đề xuất cho PHP. Liệt kê các phần phụ thuộc của dự án trong tệp 69 và với một vài lệnh đơn giản, Trình soạn thảo sẽ tự động tải xuống các phần phụ thuộc của dự án và thiết lập tự động tải cho bạn. Trình soạn thảo tương tự như NPM trong nút. js hoặc Bundler trong thế giới RubyCó rất nhiều thư viện PHP tương thích với Composer và sẵn sàng để sử dụng trong dự án của bạn. Các “gói” này được liệt kê trên Packagist, kho lưu trữ chính thức cho các thư viện PHP tương thích với Composer Cách cài đặt Trình soạn nhạcCách an toàn nhất để tải xuống trình soạn nhạc là làm theo hướng dẫn chính thức. Điều này sẽ xác minh trình cài đặt không bị hỏng hoặc giả mạo. Trình cài đặt cài đặt tệp nhị phân 00 trong thư mục làm việc hiện tại của bạnChúng tôi khuyên bạn nên cài đặt Composer trên toàn cầu (e. g. một bản duy nhất trong 01). Để làm như vậy, hãy chạy lệnh này tiếp theo 3Ghi chú. Nếu cách trên không thành công do quyền, hãy thêm tiền tố vào 02Để chạy Trình soạn thảo được cài đặt cục bộ, bạn sẽ sử dụng 03, trên toàn cầu, nó chỉ đơn giản là 04Cài đặt trên WindowsĐối với người dùng Windows, cách dễ nhất để thiết lập và chạy là sử dụng trình cài đặt ComposerSetup, trình cài đặt này thực hiện cài đặt chung và thiết lập 05 của bạn để bạn có thể chỉ cần gọi 04 từ bất kỳ thư mục nào trong dòng lệnh của mìnhCách xác định và cài đặt các phụ thuộcTrình soạn thảo theo dõi các phụ thuộc của dự án của bạn trong một tệp có tên là 69. Bạn có thể quản lý nó bằng tay nếu muốn hoặc sử dụng chính Composer. Lệnh 08 thêm một phụ thuộc dự án và nếu bạn không có tệp 69, một tệp sẽ được tạo. Đây là một ví dụ thêm Twig làm phụ thuộc cho dự án của bạn 4Ngoài ra, lệnh 10 sẽ hướng dẫn bạn cách tạo tệp 69 đầy đủ cho dự án của bạn. Dù bằng cách nào, khi bạn đã tạo tệp 69 của mình, bạn có thể yêu cầu Trình soạn thảo tải xuống và cài đặt các phụ thuộc của bạn vào thư mục 20. Điều này cũng áp dụng cho các dự án bạn đã tải xuống đã cung cấp tệp 69 5Tiếp theo, thêm dòng này vào tệp PHP chính của ứng dụng của bạn; 6 15 lưu trữ phiên bản chính xác của từng gói mà nó đã tải xuống khi bạn chạy lần đầu tiên 16. Nếu bạn chia sẻ dự án của mình với người khác, hãy đảm bảo bao gồm tệp 17, để khi họ chạy 16, họ sẽ nhận được các phiên bản giống như bạn. Để cập nhật các phụ thuộc của bạn, hãy chạy 19. Không sử dụng 19 khi triển khai, chỉ sử dụng 16, nếu không, bạn có thể kết thúc với các phiên bản gói khác nhau khi sản xuấtĐiều này hữu ích nhất khi bạn xác định các yêu cầu phiên bản của mình một cách linh hoạt. Chẳng hạn, yêu cầu phiên bản của 22 có nghĩa là “mọi thứ mới hơn 23, nhưng ít hơn 24”. Bạn cũng có thể sử dụng ký tự đại diện 25 như trong 26. Giờ đây, lệnh 19 của Nhà soạn nhạc sẽ nâng cấp tất cả các phụ thuộc của bạn lên phiên bản mới nhất phù hợp với các hạn chế mà bạn xác địnhĐể nhận thông báo về các bản phát hành phiên bản mới, bạn có thể đăng ký thư viện. io, một dịch vụ web có thể giám sát các phụ thuộc và gửi cho bạn thông báo về các bản cập nhật Kiểm tra các phụ thuộc của bạn để tìm các vấn đề bảo mậtTrình kiểm tra bảo mật PHP cục bộ là một công cụ dòng lệnh, sẽ kiểm tra tệp 17 của bạn và cho bạn biết nếu bạn cần cập nhật bất kỳ phần phụ thuộc nào của mìnhXử lý các phụ thuộc toàn cầu với ComposerTrình soạn thảo cũng có thể xử lý các phụ thuộc toàn cầu và các tệp nhị phân của chúng. Cách sử dụng rất đơn giản, tất cả những gì bạn cần làm là thêm tiền tố vào lệnh của bạn với 29. Ví dụ: nếu bạn muốn cài đặt PHPUnit và nó có sẵn trên toàn cầu, bạn sẽ chạy lệnh sau 7Điều này sẽ tạo một thư mục 30 nơi chứa các phụ thuộc toàn cầu của bạn. Để có sẵn các tệp nhị phân của các gói đã cài đặt ở mọi nơi, sau đó bạn sẽ thêm thư mục 31 vào biến 05 của mình 33 và thực thi nó. Tài liệu PEAR có hướng dẫn cài đặt chi tiết cho mọi hệ điều hànhNếu bạn đang sử dụng Linux, bạn cũng có thể xem trình quản lý gói phân phối của mình. Ví dụ, Debian và Ubuntu có gói apt 34Làm thế nào để cài đặt một góiNếu gói được liệt kê trong danh sách gói PEAR, bạn có thể cài đặt nó bằng cách chỉ định tên chính thức 8Nếu gói được lưu trữ trên một kênh khác, trước tiên bạn cần phải 35 kênh đó và cũng chỉ định kênh đó khi cài đặt. Xem tài liệu Sử dụng kênh để biết thêm thông tin về chủ đề nàyXử lý các phụ thuộc PEAR với ComposerNếu bạn đang sử dụng Trình soạn thảo và bạn cũng muốn cài đặt một số mã PEAR, bạn có thể sử dụng Trình soạn thảo để xử lý các phụ thuộc PEAR của mình. Ví dụ này sẽ cài đặt mã từ 36 9Phần đầu tiên 37 sẽ được sử dụng để cho Composer biết nó nên “khởi tạo” (hoặc “khám phá” theo thuật ngữ PEAR) repo lê. Sau đó, phần 38 sẽ thêm tiền tố vào tên gói như thế này
Tiền tố “lê” được mã hóa cứng để tránh bất kỳ xung đột nào, chẳng hạn như kênh lê có thể giống với tên nhà cung cấp gói khác, sau đó, tên ngắn của kênh (hoặc URL đầy đủ) có thể được sử dụng để tham chiếu gói đó nằm trong kênh nào Khi mã này được cài đặt, nó sẽ có sẵn trong thư mục nhà cung cấp của bạn và tự động có sẵn thông qua trình tải tự động Trình soạn thảo
Để sử dụng gói PEAR này, chỉ cần tham khảo nó như vậy 6 39 phương pháp xuất xưởng hoặc thực hiện 40 để lấy ngày giờ hiện tại. Sử dụng phương pháp 41 để chuyển đổi DateTime trở lại chuỗi cho đầu ra 1Có thể tính toán với DateTime với lớp DateInterval. DateTime có các phương thức như 42 và 43 lấy DateInterval làm đối số. Không viết mã có cùng số giây mỗi ngày. Cả tiết kiệm ánh sáng ban ngày và thay đổi múi giờ sẽ phá vỡ giả định đó. Thay vào đó hãy sử dụng khoảng thời gian ngày. Để tính chênh lệch ngày, hãy sử dụng phương pháp 44. Nó sẽ trả về DateInterval mới, rất dễ hiển thị 2Bạn có thể sử dụng phép so sánh tiêu chuẩn trên các đối tượng DateTime 6 45 46 và 47, cần được xem xét đặc biệt. Các chức năng này thường có một đối tác 48. ví dụ: 49 và 50. Các chuỗi 48 này được cung cấp cho bạn thông qua Tiện ích mở rộng chuỗi nhiều byte và được thiết kế đặc biệt để hoạt động trên các chuỗi UnicodeYou must use the 48 functions whenever you operate on a Unicode string. For example, if you use 53 on a UTF-8 string, there’s a good chance the result will include some garbled half-characters. Chức năng chính xác để sử dụng sẽ là đối tác nhiều byte, 54Phần khó là luôn nhớ sử dụng các hàm 48. Nếu bạn quên dù chỉ một lần, chuỗi Unicode của bạn có khả năng bị cắt xén trong quá trình xử lý tiếp theoKhông phải tất cả các hàm chuỗi đều có đối tác 48. Nếu không có ai cho những gì bạn muốn làm, thì bạn có thể không gặp mayBạn nên sử dụng hàm 57 ở đầu mỗi tập lệnh PHP mà bạn viết (hoặc ở đầu tập lệnh bao gồm toàn cầu của bạn) và hàm 58 ngay sau nó nếu tập lệnh của bạn xuất ra trình duyệt. Việc xác định rõ ràng mã hóa các chuỗi của bạn trong mọi tập lệnh sẽ giúp bạn đỡ phải đau đầu hơn rất nhiềuAdditionally, many PHP functions that operate on strings have an optional parameter letting you specify the character encoding. Bạn phải luôn chỉ rõ ràng UTF-8 khi được cung cấp tùy chọn. Ví dụ: 59 có tùy chọn mã hóa ký tự và bạn phải luôn chỉ định UTF-8 nếu xử lý các chuỗi như vậy. Lưu ý rằng kể từ PHP 5. 4. 0, UTF-8 là mã hóa mặc định cho 59 và 61Cuối cùng, nếu bạn đang xây dựng một ứng dụng phân tán và không thể chắc chắn rằng tiện ích mở rộng 62 sẽ được kích hoạt, thì hãy cân nhắc sử dụng gói symfony/polyfill-mbstring Composer. Điều này sẽ sử dụng 62 nếu có sẵn và quay lại các chức năng không phải UTF-8 nếu khôngUTF-8 ở cấp Cơ sở dữ liệuNếu tập lệnh PHP của bạn truy cập MySQL, thì có khả năng chuỗi của bạn có thể được lưu trữ dưới dạng chuỗi không phải UTF-8 trong cơ sở dữ liệu ngay cả khi bạn tuân theo tất cả các biện pháp phòng ngừa ở trên Để đảm bảo chuỗi của bạn chuyển từ PHP sang MySQL dưới dạng UTF-8, hãy đảm bảo rằng cơ sở dữ liệu và bảng của bạn đều được đặt thành bộ ký tự và đối chiếu 64, đồng thời bạn sử dụng bộ ký tự 64 trong chuỗi kết nối PDO. Xem mã ví dụ bên dưới. Điều này cực kỳ quan trọngLưu ý rằng bạn phải sử dụng bộ ký tự 64 để hỗ trợ UTF-8 hoàn chỉnh, không phải bộ ký tự 67. Xem phần Đọc thêm để biết tại saoUTF-8 ở cấp độ trình duyệtSử dụng hàm 58 để đảm bảo rằng tập lệnh PHP của bạn xuất ra các chuỗi UTF-8 cho trình duyệt của bạnSau đó, trình duyệt sẽ cần được thông báo bằng phản hồi HTTP rằng trang này phải được coi là UTF-8. Ngày nay, người ta thường đặt bộ ký tự trong tiêu đề phản hồi HTTP như thế này Thẻ 6 69 trong thẻ trang của bạn 6đọc thêm 70. Nó có từ năm 1995 và vẫn là một triển khai hoàn chỉnh để dịch phần mềm. Thật dễ dàng để chạy, trong khi vẫn có các công cụ hỗ trợ mạnh mẽ. Đó là về Gettext chúng ta sẽ nói ở đây. Ngoài ra, để giúp bạn không gặp rắc rối với dòng lệnh, chúng tôi sẽ giới thiệu một ứng dụng GUI tuyệt vời có thể được sử dụng để cập nhật nguồn l10n của bạn một cách dễ dàngCó các thư viện phổ biến được sử dụng hỗ trợ Gettext và các triển khai khác của i18n. Một số trong số chúng có vẻ dễ cài đặt hơn hoặc có các tính năng bổ sung hoặc định dạng tệp i18n. Trong tài liệu này, chúng tôi tập trung vào các công cụ được cung cấp cùng với lõi PHP, nhưng ở đây chúng tôi liệt kê các công cụ khác để hoàn thiện
Other frameworks also include i18n modules, but those are not available outside of their codebases
If you decide to go for one of the libraries that provide no extractors, you may want to use the gettext formats, so you can use the original gettext toolchain (including Poedit) as described in the rest of the chapter GettextInstallationYou might need to install Gettext and the related PHP library by using your package manager, like 77 or 78. After installed, enable it by adding 79 (Linux/Unix) or 80 (Windows) to your 81Here we will also be using Poedit to create translation files. You will probably find it in your system’s package manager; it is available for Unix, Mac, and Windows, and can be downloaded for free on their website as well StructureTypes of filesThere are three files you usually deal with while working with gettext. The main ones are PO (Portable Object) and MO (Machine Object) files, the first being a list of readable “translated objects” and the second, the corresponding binary to be interpreted by gettext when doing localization. There’s also a POT (Template) file, which simply contains all existing keys from your source files, and can be used as a guide to generate and update all PO files. Those template files are not mandatory. depending on the tool you are using to do l10n, you can go just fine with only PO/MO files. You will always have one pair of PO/MO files per language and region, but only one POT per domain DomainsThere are some cases, in big projects, where you might need to separate translations when the same words convey different meaning given a context. In those cases, you split them into different domains. They are, basically, named groups of POT/PO/MO files, where the filename is the said translation domain. Small and medium-sized projects usually, for simplicity, use only one domain; its name is arbitrary, but we will be using “main” for our code samples. In Symfony projects, for example, domains are used to separate the translation for validation messages Locale codeA locale is simply a code that identifies one version of a language. It is defined following the ISO 639-1 and ISO 3166-1 alpha-2 specs. two lower-case letters for the language, optionally followed by an underline and two upper-case letters identifying the country or regional code. For rare languages, three letters are used For some speakers, the country part may seem redundant. In fact, some languages have dialects in different countries, such as Austrian German ( 82) or Brazilian Portuguese ( 83). The second part is used to distinguish between those dialects - when it is not present, it is taken as a “generic” or “hybrid” version of the languageDirectory structureTo use Gettext, we will need to adhere to a specific structure of folders. First, you will need to select an arbitrary root for your l10n files in your source repository. Inside it, you will have a folder for each needed locale, and a fixed 84 folder that will contain all your PO/MO pairs. Example 7Plural formsAs we said in the introduction, different languages might sport different plural rules. However, gettext saves us from this trouble once again. When creating a new 85 file, you will have to declare the plural rules for that language, and translated pieces that are plural-sensitive will have a different form for each of those rules. When calling Gettext in code, you will have to specify the number related to the sentence, and it will work out the correct form to use - even using string substitution if neededPlural rules include the number of plurals available and a boolean test with 86 that would define in which rule the given number falls (starting the count with 0). For example
Now that you understood the basis of how plural rules works - and if you didn’t, please look at a deeper explanation on the LingoHub tutorial -, you might want to copy the ones you need from a list instead of writing them by hand When calling out Gettext to do localization on sentences with counters, you will have to provide it the related number as well. Gettext sẽ tìm ra quy tắc nào sẽ có hiệu lực và sử dụng đúng phiên bản đã bản địa hóa. You will need to include in the 85 file a different sentence for each plural rule definedSample implementationAfter all that theory, let’s get a little practical. Here’s an excerpt of a 85 file - don’t mind with its format, but with the overall content instead; you will learn how to edit it easily later 8The first section works like a header, having the 92 and 93 especially empty. It describes the file encoding, plural forms and other things that are less relevant. The second section translates a simple string from English to Brazilian Portuguese, and the third does the same, but leveraging string replacement from 94 so the translation may contain the user name and visit date. The last section is a sample of pluralization forms, displaying the singular and plural version as 92 in English and their corresponding translations as 93 0 and 1 (following the number given by the plural rule). There, string replacement is used as well so the number can be seen directly in the sentence, by using 97. The plural forms always have two 92 (singular and plural), so it is advised not to use a complex language as the source of translationDiscussion on l10n keysAs you might have noticed, we are using as source ID the actual sentence in English. That 92 is the same used throughout all your 85 files, meaning other languages will have the same format and the same 92 fields but translated 93 linesTalking about translation keys, there are two main “schools” here
The Gettext manual favors the first approach as, in general, it is easier for translators and users in case of trouble. That is how we will be working here as well. However, the Symfony documentation favors keyword-based translation, to allow for independent changes of all translations without affecting templates as well Everyday usageIn a typical application, you would use some Gettext functions while writing static text in your pages. Those sentences would then appear in 85 files, get translated, compiled into 12 files and then, used by Gettext when rendering the actual interface. Given that, let’s tie together what we have discussed so far in a step-by-step example1. A sample template file, including some different gettext calls 9
2. A sample setup file (brew unlink php
brew link --overwrite [email protected]
|