Trình chuyển đổi PHP sang Node JS

js2php

Trình chuyển đổi mã nguồn sang mã nguồn JavaScript sang PHP. Bản trình diễn trực tuyến

Đây là một thử nghiệm. Vui lòng không sử dụng nó

Cài đặt

  • Cài đặt nodejs
  • Cài đặt js2php trên toàn cầu.
    js2php examples/class.js | php
    
    10

Cách sử dụng

Chuyển đổi một tệp JavaScript thành PHP

js2php examples/simple.js > simple.php

js2php examples/class.js | php
11 xuất mã PHP ra thiết bị xuất chuẩn, bạn có thể chạy nó ngay sau khi chuyển đổi

js2php examples/class.js | php

Đặc trưng

Nó chuyển đổi cái gì?

  • Lớp học [ES6]
  • Getters và Setters [ES6]
  • Không gian tên [ES6]
  • Vòng lặp [trong khi / cho / làm trong khi / cho của / cho vào]
  • Chức năng mũi tên [ES6]
  • Chuỗi mẫu [ES6]
  • Chức năng và đóng cửa
  • điều kiện
  • JavaScript lõi
    • Mảng
      • Mảng. nguyên mẫu. không dịch chuyển
      • Mảng. nguyên mẫu. sự thay đổi
      • Mảng. nguyên mẫu. đảo ngược
      • Mảng. nguyên mẫu. đẩy
      • Mảng. nguyên mẫu. nhạc pop
      • Mảng. nguyên mẫu. tham gia
      • Mảng. nguyên mẫu. mối nối
      • Mảng. nguyên mẫu. Chỉ số
      • Mảng. nguyên mẫu. chiều dài
    • JSON
      • JSON. phân tích cú pháp
      • JSON. xâu chuỗi lại
    • môn Toán
      • môn Toán. E
      • môn Toán. LN2
      • môn Toán. LN10
      • môn Toán. LOG2E
      • môn Toán. LOG10E
      • môn Toán. số Pi
      • môn Toán. SQRT2
      • môn Toán. SQRT1_2
      • môn Toán. cơ bụng
      • môn Toán. acos
      • môn Toán. acosh
      • môn Toán. asin
      • môn Toán. asinh
      • môn Toán. atan
      • môn Toán. atanh
      • môn Toán. atan2
      • môn Toán. cbrt
      • môn Toán. trần nhà
      • môn Toán. clz32
      • môn Toán. cos
      • môn Toán. cosh
      • môn Toán. kinh nghiệm
      • môn Toán. expm1
      • môn Toán. tầng lầu
      • môn Toán. hạ sốt
      • môn Toán. đăng nhập
      • môn Toán. log1p
      • môn Toán. log10
      • môn Toán. tối đa
      • môn Toán. tối thiểu
      • môn Toán. bột
      • môn Toán. ngẫu nhiên
      • môn Toán. vòng
      • môn Toán. tội
      • môn Toán. sinh
      • môn Toán. câu hỏi
      • môn Toán. rám nắng
      • môn Toán. tanh
    • Con số
      • Con số. là số nguyên
      • Con số. là hữu hạn
    • Chuỗi
      • Chuỗi. nguyên mẫu. thay thế
      • Chuỗi. nguyên mẫu. cắt tỉa
      • Chuỗi. nguyên mẫu. cắt phải
      • Chuỗi. nguyên mẫu. cắt trái
      • Chuỗi. nguyên mẫu. Đến trường hợp trên
      • Chuỗi. nguyên mẫu. toLowerCase
      • Chuỗi. nguyên mẫu. tách ra
      • Chuỗi. nguyên mẫu. chất nền
      • Chuỗi. nguyên mẫu. trận đấu
    • Chức năng
      • Chức năng. nguyên mẫu. áp dụng
      • Chức năng. nguyên mẫu. cuộc gọi
    • Ngày tháng
      • Ngày tháng. hiện nay

thử nghiệm

Các bài kiểm tra là so sánh đầu vào [js] / đầu ra [php] đơn giản

  1. Tạo tệp nguồn
    js2php examples/class.js | php
    
    12 của bạn tại
    js2php examples/class.js | php
    
    13
  2. Chuyển đổi
    js2php examples/class.js | php
    
    12 của bạn thành
    js2php examples/class.js | php
    
    15 theo cách thủ công.
    js2php examples/class.js | php
    
    16
  3. Chạy
    js2php examples/class.js | php
    
    17

Giấy phép

MIT

Hiện tại, trong Wappler, đây có vẻ là NodeJS, nhưng ai biết được nó sẽ như thế nào sau 1 năm, 5 năm hay 10 năm nữa. Những người xây dựng bằng PHP chỉ vài năm trước sẽ khá tin tưởng vào Wappler chỉ để thấy NodeJS xuất hiện và giờ đây họ đang phải đối mặt với viễn cảnh phải duyệt thủ công hàng trăm tệp. Hãy tưởng tượng giá trị của một bộ chuyển đổi có thể chuyển từ công nghệ này sang công nghệ khác, cho dù bây giờ là từ PHP sang Node hay trong tương lai từ Node sang bất kỳ thứ gì tiếp theo…

Giả sử bạn có một cơ sở mã PHP quan trọng mà bạn đã quyết định chuyển đổi sang Node. js. Bạn sẽ cung cấp cả PHP và Node. js cho người dùng của bạn trong tương lai gần, nghĩa là bạn sẽ cập nhật và cải thiện đồng thời cả hai cơ sở mã. Nhưng bạn chỉ biết một chút về Node. js; . j chưa. Bạn bắt đầu từ đâu?

Điều đầu tiên cần làm là tải xuống Node. js cho nền tảng của bạn, có thể là Linux hoặc Windows [vâng, họ hiện có phiên bản Windows. ]. Vì các phương pháp cài đặt và trình cài đặt thay đổi theo từng phiên bản và thay đổi theo thời gian nên cuốn sách này sẽ không dành thời gian cho cách cài đặt phiên bản hiện tại. Thay vào đó, nếu bạn cần hỗ trợ cài đặt, bạn nên sử dụng tài liệu trực tuyến và nếu điều đó không làm bạn thất bại, hãy sử dụng Google hoặc công cụ tìm kiếm khác để tìm các trang web và bài đăng trên diễn đàn nơi những người khác đã gặp phải các sự cố cài đặt giống như bạn đang gặp phải và đã tìm thấy

Sau khi cài đặt, bạn sẽ thấy một Node. js khá đơn giản và có hai phần chính. tệp thực thi chính của

node hello.njs
4 và tệp thực thi của
node hello.njs
5

Tệp thực thi

js2php examples/class.js | php
18 rất dễ sử dụng. Mặc dù nó có các đối số khác, thông thường bạn sẽ chỉ truyền một đối số, tên của Nút chính của bạn. tập tin nguồn js. Ví dụ

node hello.js

Tệp thực thi

js2php examples/class.js | php
18 sẽ diễn giải Nút. js trong tệp nguồn [xin chào. js trong trường hợp này], hãy thực thi mã và khi mã kết thúc, thoát trở lại trình bao hoặc dòng lệnh

chú ý rằng xin chào. js sử dụng. tiện ích mở rộng js. Các. phần mở rộng js là viết tắt của JavaScript. Thật không may, các tập tin với. js có thể chứa JavaScript phía máy khách hoặc Node phía máy chủ. mã js. Mặc dù cả hai đều sử dụng ngôn ngữ JavaScript, nhưng chúng không có điểm chung nào khác. Mã JavaScript phía máy khách cần được cung cấp cho các trình duyệt, trong khi Node phía máy chủ. js cần phải có tệp thực thi

js2php examples/class.js | php
18 chạy trên mã đó hoặc cần phải có thể truy cập được vào Nút chính. js đang được chạy dưới tệp thực thi
js2php examples/class.js | php
18. Đây là một nguyên nhân gây nhầm lẫn nghiêm trọng và không cần thiết

Trong một số nút. js, các tệp JavaScript phía máy khách được đặt trong một thư mục, chẳng hạn như thư mục máy khách, trong khi Node. js được đặt trong một thư mục khác có tên giống như máy chủ. Tách các tệp JavaScript phía máy khách khỏi Nút. js thông qua sơ đồ thư mục sẽ hữu ích, nhưng vẫn có vấn đề vì nhiều trình chỉnh sửa mã nguồn chỉ hiển thị tên tệp chứ không hiển thị tên đường dẫn đầy đủ trong thanh tiêu đề hoặc tab

Thay vào đó, tôi đã áp dụng. tiện ích mở rộng njs cho Nút. js và đặt trước. js cho các tệp JavaScript phía máy khách trong các dự án của riêng tôi. Hãy để tôi được rõ ràng, mặc dù. các. phần mở rộng njs không phải là một tiêu chuẩn. Ít nhất, chưa [và có thể không bao giờ]. Tôi đã siêng năng tìm kiếm bằng Google và thông thường sử dụng. tiện ích mở rộng js cho Nút. mã js. Để tránh nhầm lẫn liên tục giữa JavaScript phía máy khách và phía máy chủ, tôi sử dụng. tiện ích mở rộng njs cho Nút. js và trong PHP của riêng bạn tới Node. js, tôi khuyên bạn nên làm như vậy

Vì vậy, thay vì sử dụng lời chào. js được cung cấp trước đó, tôi sẽ sử dụng xin chào. njs

node hello.njs

Phần còn lại của cuốn sách này sẽ sử dụng. tiện ích mở rộng njs cho Nút. tập tin js

Một lời chào đơn giản. njs trông giống như

js2php examples/class.js | php
0

Nếu bạn chạy

js2php examples/class.js | php
00 trên tệp nguồn này, nó sẽ in âXin chào thế giới. â vào bảng điều khiển rồi thoát

Để thực sự chạy một máy chủ web, hãy sử dụng hellosvr sau. tập tin nguồn njs

js2php examples/class.js | php
2

Nếu bạn chạy

js2php examples/class.js | php
01, dòng lệnh sẽ cố tình treo. Máy chủ phải tiếp tục chạy để có thể đợi yêu cầu trang web và trả lời chúng

Nếu bạn khởi động một trình duyệt như Firefox hoặc Chrome và nhập http. //127. 0. 0. 1. 1337/ vào thanh địa chỉ, bạn sẽ thấy một trang web đơn giản có nội dung, âXin chào thế giới. â Trên thực tế, nếu bạn truy cập http. //127. 0. 0. 1. 1337/chỉ số. html hoặc http. //127. 0. 0. 1. 1337/abc hoặc thậm chí http. //127. 0. 0. 1. 1337/abc/def/ghi, bạn sẽ luôn thấy cùng một trang web đơn giản có nội dung Xin chào thế giới. â vì máy chủ phản hồi tất cả các yêu cầu trang web theo cùng một cách

Hiện tại, dòng quan trọng trong tệp nguồn này là dòng đầu tiên sử dụng nút. js

js2php examples/class.js | php
02 chức năng toàn cầu. Hàm
js2php examples/class.js | php
02 tạo Nút. mô-đun js có sẵn để sử dụng. Nút. js là những gì bạn có thể mong đợi. một tập hợp dữ liệu và chức năng được nhóm lại với nhau, thường cung cấp chức năng trong một số khu vực cụ thể. Trong trường hợp này, Nút
js2php examples/class.js | php
04. js cung cấp chức năng máy chủ HTTP đơn giản

Tệp thực thi

js2php examples/class.js | php
18 có một số mô-đun tích hợp.
js2php examples/class.js | php
04,
js2php examples/class.js | php
07,
js2php examples/class.js | php
08,
js2php examples/class.js | php
09,
js2php examples/class.js | php
20,
js2php examples/class.js | php
21,
js2php examples/class.js | php
22,
js2php examples/class.js | php
23,
js2php examples/class.js | php
24,
js2php examples/class.js | php
25 và
js2php examples/class.js | php
26. Dự kiến ​​các mô-đun tích hợp này và chức năng của chúng sẽ thay đổi theo từng phiên bản

Theo thiết kế, một mô-đun nằm trong một không gian tên. Không gian tên là một đặc điểm kỹ thuật bổ sung được thêm vào trước tham chiếu dữ liệu hoặc chức năng; . trong nút. js, một không gian tên chỉ được triển khai như một đối tượng. Khi mô-đun

js2php examples/class.js | php
04 được tải, hàm
js2php examples/class.js | php
02 trả về một đối tượng và đối tượng đó được gán cho biến
js2php examples/class.js | php
04. Biến không nhất thiết phải được gọi là âhttpâ;

Tại sao có một không gian tên?

Nút. js dự đoán rằng các mô-đun mới có chức năng mới, chẳng hạn như quyền truy cập MySQL, sẽ được phát triển bởi những người khác và cần được tích hợp vào tệp thực thi

js2php examples/class.js | php
18 sau Node. js đã được cài đặt trên máy tính của người dùng. Vì tên của dữ liệu và chức năng trong các mô-đun đó sẽ không thể đoán trước, nên nhà phát triển có thể vô tình chọn chính xác cùng tên cho một chức năng trong mô-đun vì một nhà phát triển khác có thể chọn cho một mô-đun khác. Nhưng vì một mô-đun được chứa trong một không gian tên, nên không gian tên sẽ phân biệt giữa hai chức năng. Trên thực tế, một cải tiến quan trọng so với các ngôn ngữ trước đó, chẳng hạn như C++ và Java, đó là Node. js cho phép người dùng mô-đun chỉ định tên của không gian tên do chính người dùng gán mô-đun cho biến của mình, chẳng hạn như
js2php examples/class.js | php
04 hoặc
node hello.njs
45

Các mô-đun mới này với chức năng mới là các gói. Gói là một mô-đun có thể được thêm vào tệp thực thi

js2php examples/class.js | php
18 sau này và không được tích hợp vào tệp thực thi
js2php examples/class.js | php
18 theo mặc định. Sự khác biệt giữa một mô-đun và một gói không quan trọng lắm;

Tệp thực thi

node hello.njs
5 [trình quản lý gói nút] thêm các gói mới vào tệp thực thi
js2php examples/class.js | php
18

Để cài đặt gói, trước tiên hãy sử dụng Google hoặc công cụ tìm kiếm khác để tìm gói npm mà bạn muốn cài đặt. Thông thường, gói sẽ được tìm thấy trên GitHub. Một cách khác để sử dụng công cụ tìm kiếm là sử dụng chính tệp thực thi

node hello.njs
5 để tìm gói bằng lệnh
node hello.njs
31

Thay vì máy chủ web luôn trả về câu Xin chào thế giới. â trang, giả sử chúng tôi muốn tạo một máy chủ web thực sự phục vụ các trang web tĩnh từ các tệp trên đĩa cứng. Để tìm một nút. js, một cụm từ tìm kiếm tốt để nhập vào công cụ tìm kiếm là ânodejs máy chủ web tệp tĩnhâ. Ngoài ra, ânpm search staticâ, ânpm search fileâ hoặc ânpm search serverâ sẽ liệt kê các gói npm có từ âstaticâ, âfileâ . Sử dụng một trong hai phương pháp này hoặc kết hợp cả hai phương pháp [và thêm một chút đọc và duyệt], bạn sẽ thấy rằng Alexis Sellier, một. k. a. cloudhead, đã tạo một mô-đun máy chủ tệp tĩnh phổ biến và lưu trữ nó tại đây

Gói này có thể được cài đặt bằng cách chạy dòng lệnh sau [các tùy chọn bổ sung, chẳng hạn như công tắc dòng lệnh

node hello.njs
32 hoặc
node hello.njs
33, có sẵn để định cấu hình cài đặt gói]

node hello.njs
4

Tệp thực thi

node hello.njs
5 sẽ truy xuất gói và hy vọng sẽ cài đặt thành công. Đây là kết quả sau khi cài đặt thành công

node hello.njs
3

node hello.njs
35 chỉ ra rằng HTTP GET đã được sử dụng để cố truy xuất gói.
node hello.njs
36 cho biết rằng yêu cầu HTTP GET đã trả về âHTTP status 200 OKâ, nghĩa là tệp đã được truy xuất thành công

Có hàng trăm gói npm, nhưng một vài gói rất phổ biến là

node hello.njs
37,
node hello.njs
38,
node hello.njs
39,
node hello.js
40,
node hello.js
41,
node hello.js
42 và
node hello.js
43

Để triển khai máy chủ web phục vụ các trang web tĩnh, hãy sử dụng httpsvr sau. tập tin nguồn njs

node hello.js
4

Ở cấp độ cơ bản, đây là cách Node. phát triển js xảy ra. Một trình chỉnh sửa được sử dụng để tạo và sửa đổi một hoặc nhiều. các tệp nguồn njs có chứa Nút. mã js. Khi cần chức năng mới không được tích hợp trong tệp thực thi

js2php examples/class.js | php
18, tệp thực thi
node hello.njs
5 được sử dụng để tải xuống và cài đặt chức năng cần thiết dưới dạng gói npm. Tệp thực thi
js2php examples/class.js | php
18 được chạy trên. njs để thực thi Node. js để ứng dụng web có thể được kiểm tra và sử dụng

Tại thời điểm này, ba nút. máy chủ js đã được trình bày. xin chào. njs, hellosvr. njs và httpsvr. njs. Các tệp nguồn này đơn giản đến mức chúng được tạo như thế nào không quan trọng. Bạn có thể đã sử dụng bất kỳ trình soạn thảo văn bản nào để tạo chúng và chúng sẽ hoạt động tốt. Nếu bạn mắc lỗi, nó có thể dễ dàng được khắc phục bằng cách chỉnh sửa tệp nguồn

Tuy nhiên, có thể giả định rằng bạn đã có một ứng dụng web PHP phức tạp với hàng chục tệp và hàng chục nghìn dòng PHP mà bạn muốn chuyển đổi thành Node. js. Chiến lược chuyển đổi sẽ tuân theo quy trình từng bước đơn giản nhưng tẻ nhạt

Bước đầu tiên sẽ là tạo một Node soạn sẵn. js, như được mô tả chi tiết trong Chương 2, sẽ hỗ trợ Node mới. mã js. Nút soạn sẵn này. js sẽ được tăng cường để phản hồi các URL cụ thể có sẵn để được gọi bởi ứng dụng khách. Về bản chất, một ứng dụng web là một loạt các yêu cầu URL. Mục tiêu của chuyển đổi là tạo ra một Nút. máy chủ js phản hồi máy khách theo cách chính xác giống như máy chủ PHP. Để thực hiện điều này, Node soạn sẵn. js được sửa đổi để xử lý từng cuộc gọi HTTP và định tuyến nó đến Nút cụ thể. js mà sau này sẽ triển khai chức năng của trang PHP cụ thể trong Node. js

Bước thứ hai sẽ là cấu trúc lại mã PHP, như được mô tả chi tiết trong Chương 3 và Chương 4, để giúp chuyển đổi sang Node dễ dàng hơn. jsâtức là làm cho mã PHP thêm Node. js thân thiện. Nó có thể gây sốc, nhưng quá trình chuyển đổi không chỉ là vấn đề đóng băng mã PHP ở bất kỳ dạng nào hiện tại, sao chép mã PHP vào Nút. js, sau đó, từng dòng một, chuyển đổi mã PHP thành Node. mã js. Vì cả PHP và Node. js sẽ được cải thiện và có thêm các tính năng mới trong tương lai, điều đó có nghĩa là cả PHP và Node. mã js sẽ cần “cho” một chút về độ tinh khiết của chúng để giải quyết những khác biệt giữa cách thức hoạt động của hai ngôn ngữ. Mã PHP sẽ cần phải được cấu trúc lại và thực hiện một số hy sinh để cho phép Nút chức năng. mã js sẽ được tạo sau này. Khi kết thúc quá trình chuyển đổi, cả hai cơ sở mã sẽ trông rất giống nhau và sẽ được viết bằng một loại ngôn ngữ kim loại lai, một tập hợp các thành ngữ và thuật toán có thể dễ dàng chuyển từ PHP sang Node. js. Ngôn ngữ kim loại sẽ làm cho cả hai cơ sở mã trông hơi kỳ lạ, nhưng sẽ có đầy đủ chức năng và theo thời gian, sẽ trở nên rất quen thuộc và dễ hiểu đối với các nhà phát triển, những người duy trì và cải thiện cả hai cơ sở mã. Ngay cả khi cuối cùng bạn định vứt bỏ mã PHP và muốn có Node nguyên sơ. js, tốt nhất là cấu trúc lại mã PHP, chuyển đổi cả PHP và Node. js thành ngôn ngữ kim loại hỗn hợp kỳ lạ, vứt bỏ mã PHP và sau đó cấu trúc lại Node đã lai. js thành Node thuần túy. mã js. Tái cấu trúc mã PHP là một bước cần thiết cho mọi PHP thành Node. js, bất kể mục tiêu cuối cùng của bạn là gì

Bước thứ ba là sao chép và dán một trong các trang PHP từ tệp nguồn PHP vào Nút. tập tin nguồn js. Gần như chắc chắn, Node. js sau đó sẽ bị hỏng;

Bước thứ tư là chuyển đổi và sửa mã mới được thêm vào trong Nút. js, như được mô tả chi tiết trong các chương còn lại, để nó trở thành Nút hoạt động. mã js. Ban đầu, nút. js sẽ không chạy và sẽ thoát ngay lập tức với dấu vết ngăn xếp. Dấu vết ngăn xếp sẽ chỉ ra vị trí của lỗi, nguyên nhân là do một số mã PHP không được chuyển đổi hoàn toàn hoặc không được chuyển đổi chính xác thành Nút. mã js. Sau khi vấn đề được phân tích, kỹ thuật chuyển đổi từ một trong các chương còn lại sẽ được áp dụng cho toàn bộ Nút. tập tin js; . khởi tạo đối tượng js bằng cách sử dụng dấu ngoặc nhọn [ { và } ]. Khi nút. js được chạy lại, nó sẽ tiến xa hơn một chút, nhưng rất có thể sẽ tiếp tục thoát với dấu vết ngăn xếp. Cuối cùng, nút. js sẽ đủ tốt để nó không bị thoát ngay lập tức với dấu vết ngăn xếp

Thật đáng ngạc nhiên là có bao nhiêu mã PHP chưa được chuyển đổi có thể tồn tại trong một Nút. js và không gây ra Node. js để thoát ngay lập tức bằng dấu vết ngăn xếp. Khi bạn đã quen với quá trình chuyển đổi, bạn sẽ biết PHP và Node giống nhau như thế nào. js, ngay cả khi mã PHP chưa được chuyển đổi sẽ có thể phân tích cú pháp bằng tệp thực thi

js2php examples/class.js | php
18 và sẽ cho phép tệp thực thi
js2php examples/class.js | php
18 chạy và chấp nhận các yêu cầu HTTP và chỉ thất bại khi nó thực sự cần thực thi một số mã PHP chưa được chuyển đổi

Một khi nút. js đủ tốt để nó không thoát ra ngay lập tức với dấu vết ngăn xếp, bạn có thể bắt đầu kiểm tra ứng dụng khách dựa trên mã đó. Ứng dụng khách thường sẽ là một trình duyệt, như Firefox hoặc Google Chrome. Thông thường, khi bạn bắt đầu cố gắng sử dụng ứng dụng khách, nút. js sẽ thoát ra với dấu vết ngăn xếp tại một thời điểm nào đó, sau đó bạn sẽ cần phân tích dấu vết ngăn xếp và áp dụng kỹ thuật chuyển đổi để khắc phục sự cố. Theo thời gian, bạn sẽ phát triển một loạt trường hợp thử nghiệm đặc biệt mà bạn có thể thực hiện với khách hàng để phát hiện các sự cố chuyển đổi chưa được giải quyết hoặc hy vọng xác nhận rằng Node. máy chủ js đang chạy chính xác

Đôi khi, việc sử dụng một công cụ tìm khác biệt trực quan để so sánh mã PHP và Node cũng sẽ hữu ích. mã js; . mã js. Điều này sẽ giúp nhắc nhở bạn về các kỹ thuật chuyển đổi mà bạn chưa sử dụng nhưng cần sử dụng. Nó cũng sẽ giúp bạn giữ quá trình chuyển đổi đi đúng hướng và trong tầm kiểm soát

Phần còn lại của PHP đến Node. js chỉ đơn giản là vấn đề áp dụng kết hợp các bước trước đó nhiều lần cho đến khi tất cả mã PHP được chuyển đổi thành Node. mã js và nút. js hoạt động đáng tin cậy và có thể hoán đổi cho nhau với phiên bản PHP. Tùy thuộc vào kích thước của cơ sở mã PHP, quá trình chuyển đổi có thể mất vài tháng, nhưng—nếu bạn quyết tâm—thì quá trình chuyển đổi sẽ hoàn tất

Trong quá trình chuyển đổi, bạn sẽ thấy rất nhiều dấu vết ngăn xếp. Rất nhiều. Đây là một dấu vết ngăn xếp ví dụ được tạo vì gói

node hello.njs
38 npm không được cài đặt bằng cách sử dụng tệp thực thi
node hello.njs
5 trước httpsvr. njs đã được chạy

node hello.njs
8

Phần trên cùng của dấu vết ngăn xếp hiển thị mã gây ra lỗi. Đây không phải là mã gây ra lỗi;

Bên dưới đó, thông báo lỗi bên trong đối tượng

node hello.njs
83 được hiển thị. Thông báo lỗi này cho biết không thể tìm thấy mô-đun
node hello.njs
38

Phần còn lại là âcall stack,â một loạt các lệnh gọi hàm được biểu thị bằng từ âatâ hiển thị chuỗi các lệnh gọi hàm đến mã gây ra lỗi. Ngăn xếp cuộc gọi được liệt kê từ cuộc gọi trong cùng đến cuộc gọi ngoài cùng. Trong trường hợp này, hàm

node hello.njs
85 là lệnh gọi ở đầu ngăn xếp lệnh gọi, hàm này cho biết rằng đó là lệnh gọi trong cùng và do đó là lệnh gọi thực sự chứa mã gây ra lỗi. Hàm
node hello.njs
85 được gọi bởi hàm
node hello.njs
87, được gọi bởi hàm
node hello.njs
88, được gọi bởi hàm
js2php examples/class.js | php
02, được gọi bởi hàm
node hello.njs
60, v.v.

Sau mỗi lệnh gọi hàm trong ngăn xếp cuộc gọi, bạn sẽ thấy tên tệp của tệp nguồn chứa hàm đó, dòng cuối cùng được thực thi [là dòng đã gọi hàm ở trên nó hoặc dòng thực sự gây ra đối tượng lỗi . Trong ví dụ này, bạn có thể thấy rằng hai tệp nguồn có liên quan. mô-đun. js và httpsvr. njs

mô-đun. js nằm bên trong tệp thực thi

js2php examples/class.js | php
18; . httpsvr. tập tin njs là một phần của mã nguồn riêng của chúng tôi. Mặc dù httpsvr. njs chỉ được tham chiếu một lần và nằm ở giữa ngăn xếp cuộc gọi, có thể giả định rằng lỗi là do mã nguồn của chúng tôi gây ra. Nói chung, chúng ta có thể giả sử rằng Node. js, các mô-đun tích hợp của nó và thậm chí mọi mô-đun npm đã cài đặt đều hoạt động hoàn hảo. Ngay cả khi chúng không hoạt động, chúng ta phải cho rằng chúng đang hoạt động cho đến khi chúng ta chứng minh ngược lại bằng cách loại bỏ tất cả các lỗi khỏi mã gọi của chúng ta. Ngay cả khi chúng tôi phát hiện ra rằng lỗi bắt nguồn từ nơi khác, chúng tôi chỉ có quyền kiểm soát mã của chính mình chứ không phải bất kỳ mã nào khác. Giải pháp có thể là tạo ra một giải pháp thay thế trong mã của chính chúng tôi thay vì thực hiện quá trình vận động hành lang lâu dài và chậm chạp để các nhà phát triển khác sửa mã của họ. Vì vậy, cuối cùng, bất kể lỗi cuối cùng có thể ở đâu, nơi đầu tiên chúng ta tập trung sự chú ý là vào httpsvr. tập tin njs

Một phần của ngăn xếp cuộc gọi để tập trung sự chú ý của chúng tôi vào là

node hello.njs
6

Cuộc gọi chức năng này nằm trên dòng 2 ở vị trí 14 trong httpsvr. tập tin njs. Đây là httpsvr. tập tin njs

node hello.js
4

Bằng cách tham chiếu chéo ngăn xếp lệnh gọi với mã nguồn, hàm

js2php examples/class.js | php
02 cố tải mô-đun
node hello.njs
38 là lệnh gọi hàm xảy ra lỗi. Điều này phù hợp với thông báo lỗi. âKhông thể tìm thấy mô-đun ânode-staticâ"

Nếu chúng ta tra cứu ngăn xếp cuộc gọi, chúng ta sẽ thấy hàm

node hello.njs
87 và hàm
node hello.njs
65
node hello.njs
66 ở trên cùng. Nhìn vào tên của hai chức năng này, chúng tôi đoán rằng Node. môi trường js đang gặp khó khăn khi tải mô-đun vì không thể tìm thấy tệp được liên kết với mô-đun. Chúng tôi có thể đoán rằng tệp mô-đun [có thể là gói npm] bị thiếu vì nó chưa được cài đặt. Một lần nữa, điều này phù hợp với thông báo lỗi. âKhông thể tìm thấy mô-đun ânode-staticâ"

Cái gọi là hàm

node hello.njs
67 có thể chỉ ra rằng lệnh gọi hàm
js2php examples/class.js | php
02 được thực hiện trong không gian chung, thay vì trong một hàm do người dùng xác định trong httpsvr. njs. Nhưng đó không phải là luôn luôn như vậy. Một đối tượng ẩn danh có thể được tạo bên trong một hàm do người dùng định nghĩa. Nhưng xa hơn về ngăn xếp cuộc gọi, bên dưới lệnh gọi hàm
node hello.njs
67, chúng tôi thấy rằng người gọi là hàm
node hello.js
40 trong mô-đun. tập tin js. Cuộc gọi hàm
js2php examples/class.js | php
02 đã được thực hiện trong không gian chung

Sử dụng tất cả thông tin này, một giải pháp là thử cài đặt gói npm

node hello.njs
38

node hello.njs
4

Phải thừa nhận rằng bạn sẽ không cần phải thực hiện tất cả các phân tích này mỗi khi bạn nhìn thấy một Nút. ngăn xếp cuộc gọi js. Nhưng vì bạn sẽ thấy rất nhiều ngăn xếp cuộc gọi, nên bạn nên hiểu cách phân tích kỹ lưỡng một ngăn xếp—đặc biệt là vì việc phát hiện và sửa lỗi chiếm 95% thời gian trong PHP tới Node. chuyển đổi js

Tóm lại, đây là quy trình phân tích ngăn xếp cuộc gọi. đọc lỗi, xem thông báo lỗi [nếu có], đoán và tập trung vào lệnh gọi hàm cụ thể trong mã của riêng bạn, xem mã và tìm dòng và thậm chí có thể là vị trí của lỗi, tra cứu ngăn xếp

Học cách phân tích đầy đủ dấu vết ngăn xếp là một kỹ năng hữu ích để thực hiện PHP thành nút thành công. chuyển đổi js. Dấu vết ngăn xếp là một công cụ chẩn đoán để tìm ra lỗi của mã, giống như chụp X-quang được bác sĩ sử dụng để tìm ra lỗi của bệnh nhân. Từ một quan điểm nhất định, chuyển đổi PHP sang Node. js có thể được coi là tương tự như một ca phẫu thuật phức tạp trên bệnh nhân. Bạn sẽ được phẫu thuật trên PHP và Node. mã js. Giống như thực hiện phẫu thuật, cần rất nhiều kỹ năng và sự kiên trì, nhưng có một môi trường tốt cũng thực sự có ích. Giống như tia X là một công cụ được sử dụng trong phòng điều hành, dấu vết ngăn xếp sẽ là một công cụ trong môi trường phát triển để chuyển đổi. Tiếp theo, chúng ta sẽ thảo luận về các môi trường phát triển tích hợp, môi trường này sẽ cung cấp một loại rạp hát trong phòng mổâ cho quá trình chuyển đổi

Vì bạn có thể sẽ xử lý hàng tá tệp PHP và hàng chục nghìn dòng PHP và chẳng bao lâu nữa là hàng tá Nút. js và hàng chục nghìn dòng Node. js, một trình soạn thảo văn bản đơn giản có thể sẽ không đủ tốt để theo dõi mọi thứ và giữ cho quá trình chuyển đổi hiệu quả. Trình soạn thảo văn bản đơn giản sẽ ổn khi bạn nhập một số ví dụ đơn giản để tìm hiểu cách lập trình bằng Node. js, nhưng khi bạn đang xử lý một lượng lớn PHP và Node. js, bạn sẽ cần thứ gì đó hiệu quả hơn

Nếu bạn đang phát triển PHP hoặc Node. js, bạn có thể chọn một môi trường phát triển tích hợp một ngôn ngữ [IDE] và sử dụng nó gần như ngay lập tức. Eclipse PDT [Công cụ phát triển PHP] là một PHP IDE phổ biến được viết bằng Java do Quỹ Eclipse sản xuất. Một số khác là Zend Studio, PHPEdit và Dreamweaver. trên nút. js, có ít sự lựa chọn hơn và chúng có mức độ phổ biến và hiệu quả đáng ngờ hơn. Tại thời điểm viết bài này, tôi đã tìm thấy Komodo Edit, nide và Cloud9

Tuy nhiên, mục tiêu của bạn là chuyển đổi mã PHP thành Node. js đồng thời cải thiện và thêm các tính năng cho cả hai cơ sở mã. Để làm điều này một cách hiệu quả, tôi khuyên bạn nên sử dụng Eclipse PDT, nhưng với một số sửa đổi để giúp nó hỗ trợ Node. mã js. Kiến thức bổ sung về cách dễ dàng so sánh PHP và Node. js sẽ cần thiết để hỗ trợ quá trình chuyển đổi

Bây giờ, trước khi tôi mô tả cách thiết lập Eclipse PDT cho PHP tới Node. js, tôi nên giải quyết ngắn gọn các nhà phát triển từ chối các công cụ đó và khăng khăng sử dụng các trình soạn thảo văn bản thuần túy đơn giản. Họ nói, âTôi chỉ sử dụng vi. Nếu bạn là người cảm thấy như vậy, bạn có thể bỏ qua phần còn lại của chương này và thiết lập môi trường chuyển đổi của mình theo bất kỳ cách nào phù hợp với bạn. Tôi đang mô tả việc cài đặt và sửa đổi Eclipse PDT ở đây chỉ bởi vì nó là một công cụ thiết yếu để tôi thực hiện PHP của riêng mình cho Node. js và nó cũng sẽ là một công cụ thiết yếu cho nhiều nhà phát triển khác

Để cài đặt Elipse PDT, trước tiên hãy tải xuống Java. Tất cả các IDE của Eclipse được phát triển bằng Java và cần Java để chạy, bao gồm cả PDT của Eclipse. Tôi thích cài đặt Java JDK thay vì JRE. Tại thời điểm viết bài này, tôi đang sử dụng jdk-6u29-windows-i586. người cũ

Tiếp theo, duyệt đến đây. Cân nhắc sử dụng bản cài đặt Zend Server Community Edition [CE], bao gồm Eclipse PDT, máy chủ Zend Server HTTP có hỗ trợ gỡ lỗi PHP tích hợp và thậm chí cả cơ sở dữ liệu MySQL. Tôi giả sử rằng ứng dụng web PHP của bạn sử dụng cơ sở dữ liệu MySQL hoặc ít nhất là có cơ sở dữ liệu MySQL dưới dạng tùy chọn

Khi viết bài này, có một liên kết PDT và Zend Server Community Edition trên trang tải xuống PDT của Eclipse. Nếu liên kết không tồn tại hoặc bạn đang chạy một máy chủ web khác, hãy tải xuống phiên bản Eclipse PDT ổn định mới nhất phù hợp với hệ điều hành của bạn. Sau đó, bỏ qua một vài đoạn tiếp theo cho đến khi văn bản mô tả việc cài đặt và định cấu hình PDT của Eclipse. Nếu không, hãy theo liên kết và tải xuống Eclipse PDT cho Zend Server CE. Hiện tại, tôi đang sử dụng zend-eclipse-php-helios-win32-x86. khóa kéo. Giải nén nhưng chưa chạy Eclipse PDT

Từ cùng một trang web, tải xuống Zend Server CE. Tại thời điểm này, tôi đang sử dụng ZendServer-CE-php-5. 3. 8-5. 5. 0-Windows_x86. người cũ

Cài đặt máy chủ Zend CE. Tóm lại, hãy chọn các lựa chọn hợp lý, chủ yếu là mặc định, cho đến trang Loại thiết lập. Chọn nút radio Tùy chỉnh trên trang Loại thiết lập, thay vì nút radio Thông thường và nhấn nút Tiếp theo. Đánh dấu vào hộp kiểm âMySQL Server [separate download]â từ trang Custom Setup. Sau đó kết thúc trình cài đặt

Hiện tại, Zend Server CE hiển thị một trình duyệt để định cấu hình cách nó hoạt động. Trong trường hợp của chúng tôi, không cần cấu hình đặc biệt cho chính máy chủ

Máy chủ cơ sở dữ liệu MySQL được cài đặt và cấu hình như một phần của trình cài đặt Zend Server CE. Theo mặc định, mật khẩu gốc cho máy chủ cơ sở dữ liệu MySQL là chuỗi rỗng [a. k. a. ââ]

Chạy PDT của Eclipse. Zend Server CE được xây dựng trên Apache 2 và có thư mục htdocs. Khi PDT của Eclipse chạy, hãy tìm và chọn thư mục htdocs làm thư mục Không gian làm việc PDT của Eclipse. Nếu bạn đang sử dụng một máy chủ web khác với Zend Server CE hoặc Apache, hãy chọn thư mục gốc của tài liệu làm thư mục Không gian làm việc PDT của Eclipse để các tệp PHP được triển khai tới máy chủ web có thể được chỉnh sửa tại chỗ

Nó nằm ngoài phạm vi của cuốn sách này, nhưng nếu bạn muốn, hãy thử trải nghiệm bằng cách sử dụng trình gỡ lỗi PHP trên cơ sở mã PHP hiện có của bạn

Eclipse PDT và máy chủ web của bạn sẽ là nền tảng của âmôi trường phát triển chuyển đổi của bạn. â Bây giờ, hãy thực hiện một số sửa đổi và tìm hiểu cách sử dụng Eclipse PDT để quản lý và triển khai hiệu quả quá trình chuyển đổi

Bản thân PDT của Eclipse đã hỗ trợ các tệp JavaScript và vì Node. js là JavaScript, nó hỗ trợ Node. js. Nhưng bởi vì. phần mở rộng tệp njs không chuẩn, Eclipse PDT không nhận dạng được. njs dưới dạng Nút. tập tin js. Vì vậy, nếu một. tập tin njs [e. g. , httpsvr. njs] được mở trong Eclipse PDT, nó được hiển thị dưới dạng văn bản thuần túy không tô màu cú pháp hoặc hoàn thành mã bật lên như trong JavaScript thông thường [. js] tập tin

Để sửa đổi Eclipse PDT để nhận ra. các tệp njs dưới dạng Nút. js, hãy mở menu Cửa sổ từ menu chính PDT của Eclipse và chọn mục menu Tùy chọn. Khi bạn thực hiện việc này, bạn sẽ thấy hộp thoại Tùy chọn có hai ô bên trong []. Trong ngăn bên trái, bạn sẽ thấy một điều khiển dạng cây với một nhóm các danh mục và danh mục phụ của tùy chọn được sắp xếp theo thứ bậc. Ở khung bên phải, bạn sẽ thấy hộp thoại cho phép xem và chỉnh sửa các mục ưu tiên cho danh mục đang chọn ở khung bên trái

Ở khung bên trái, mở mục General tree folder, sau đó chọn mục ContentTypes tree. Trong ngăn bên phải, bạn sẽ thấy danh sách các loại nội dung. Mở mục thư mục Cây văn bản trong điều khiển cây Loại nội dungâ ở ngăn bên phải. Bên dưới mục Thư mục cây văn bản, chọn mục cây Tệp nguồn JavaScript. Khi bạn chọn mục cây Tệp nguồn JavaScript, bạn sẽ thấy một hộp danh sách có một mục duy nhất, â*. js [đã khóa]â, trong hộp danh sách âLiên kết tệpâ cùng với nút Thêm⦠ở giữa bên phải của ngăn. Nhấn nút Thêmâ¦. Sau khi nhấn nút Addâ¦, hộp thoại Thêm liên kết loại nội dung sẽ bật lên []. Bạn sẽ nhập

node hello.js
43 vào hộp chỉnh sửa Content typeâ trong hộp thoại mới đó

Sau đó, nhấn nút OK trên tất cả các hộp thoại đang mở để lưu các sửa đổi

Khi sửa đổi đó được lưu, tô màu cú pháp JavaScript và hoàn thành mã sẽ hoạt động cho Node. js các tệp nguồn được lưu trữ dưới dạng. tập tin njs

Hình 1-1.  Hộp thoại Tùy chọn PDT của Eclipse

Với tô màu cú pháp làm việc cho. njs, bạn có thể phát hiện Node đơn giản. js lỗi cú pháp bằng cách nhận thấy rằng một số từ có màu sai. Kiểm tra trực quan là một phần quan trọng của bất kỳ dự án lập trình nào, đặc biệt là trong PHP to Node. dự án chuyển đổi js. Một kỹ thuật kiểm tra trực quan hữu ích khác là so sánh PHP và Node. js bằng cách sử dụng trình xem khác biệt nâng cao và rất trực quan để tìm hiểu mọi thứ về chất lượng và tiến trình của chuyển đổi

Một chương trình tìm khác biệt cho thấy sự khác biệt giữa hai tệp. Các chương trình tìm khác biệt dựa trên văn bản đơn giản thường in ra các điểm khác biệt dưới dạng các dòng văn bản đơn sắc, mỗi dòng từ một tệp. Loại chương trình khác đó là vô dụng để phân tích PHP thành Node. chuyển đổi js. Một chương trình khác biệt trực quan tinh vi là cần thiết. Thay vì hiển thị các tệp dưới dạng các dòng văn bản xen kẽ, các tệp sẽ được hiển thị cạnh nhau. Thay vì đơn sắc, màu sắc sẽ được sử dụng. Thay vì chỉ hiển thị những dòng khác nhau, sự khác biệt trong các dòng—xuống cấp độ ký tự—sẽ được đối chiếu và hiển thị

Hình 1-2.  Hộp thoại Eclipse PDT Add Content Type Association

Eclipse PDT có một trình xem khác biệt trực quan nâng cao được tích hợp sẵn. Chúng ta có thể sử dụng trình xem này để so sánh một. php thành tệp tương ứng. tập tin njs. Để sử dụng trình xem của một. tệp php và một. njs, chọn cả hai tệp. Sau đó, nhấp chuột phải vào một trong số chúng và chọn menu con So sánh với rồi chọn mục menu Each Other trong menu con đó. hiển thị ảnh chụp màn hình của trình xem PDT Eclipse so sánh một. php với tệp tương ứng. tập tin njs

Hình 1-3.  Chế độ xem So sánh PDT của Eclipse

Bạn không cần phải nhìn vào hình chi tiết để hiểu cách thức hoạt động của nó hoặc xem PHP và Node giống nhau như thế nào. js là

Bên trái là đồng rand. tập tin njs. Bên phải là đồng rand. tập tin php. Sự khác biệt là màu xám;

Lưu ý có bao nhiêu dòng gần như hoàn toàn màu trắng, ngoại trừ ký hiệu đô la đi lạc [$] màu xám. Cả PHP và Nút. js sử dụng từ khóa

node hello.js
44 ở cùng một vị trí và đặt tên của hàm ở cùng một vị trí. Trong những năm qua, các ngôn ngữ mới đã trở nên phổ biến để tránh sự thay đổi trong cấu trúc cú pháp và áp dụng một cú pháp tương tự cho những thứ như định nghĩa hàm. Ngoài ra, lưu ý rằng câu lệnh
node hello.js
45 rất giống

Nó có lợi cho nhà phát triển để làm cho sự khác biệt trực quan dễ dàng so sánh. php thành tệp tương ứng. tập tin njs. Tính năng tìm khác biệt trực quan trong PDT của Eclipse rất tốt nhưng không phải là không thể sai được. Đôi khi, việc di chuyển xung quanh mã trong một trong hai tệp có thể cho phép thuật toán so sánh của tính năng khác biệt trực quan tìm thấy nhiều kết quả phù hợp hơn; . Sao chép một chức năng để nó sớm hơn hoặc muộn hơn trong một tệp có thể không liên quan đến hiệu suất và chức năng của mã, nhưng có thể làm cho tính năng khác biệt trực quan khớp với mã chính xác hơn nhiều. Bạn nên dành thời gian định kỳ trong suốt quá trình chuyển đổi để thử nghiệm với việc di chuyển mã xung quanh trong mỗi tệp và xem hiệu quả so sánh

Trong PDT của Eclipse, mã có thể được chỉnh sửa trong một cửa sổ riêng biệt, trong chính cửa sổ so sánh hoặc trong cả hai. Nếu nó được chỉnh sửa trong một cửa sổ riêng biệt và được lưu, bất kỳ cửa sổ so sánh nào hiển thị cùng một tệp sẽ được tải lại và so sánh lại. Thực hiện một số chỉnh sửa trong một cửa sổ riêng biệt và lưu tệp để có thể xác định hiệu ứng so sánh là một kỹ thuật phổ biến

Đương nhiên, việc giữ mã ở cùng định dạng trong cả hai tệp thực sự hữu ích để sử dụng cùng tên cho mọi thứ [chẳng hạn như hàm và biến] và thậm chí để cấu trúc lại mã trong một hoặc cả hai tệp sao cho tính năng tìm khác biệt trực quan sẽ tìm thấy

Để giữ PHP và Node. js được đồng bộ hóa, đồng thời cải thiện và thêm các tính năng cho cả hai cơ sở mã, bạn sẽ thường dựa vào sự khác biệt trực quan để đảm bảo rằng PHP và Node. mã js là chính xác. Theo thời gian, nhà phát triển sẽ phát triển ý thức tinh chỉnh về những gì không đủ màu trắng và những gì quá nhiều màu trắng

Khi không có đủ màu trắng, tính năng tìm khác biệt trực quan thường không hoạt động và cố khớp mã PHP trong. php tập tin vào nút. mã js trong. njs, không có nghĩa là khớp. Sẽ có rất nhiều màu xám khi so sánh, cho thấy sự khác biệt và không phải cái nào cũng khớp. Thử nghiệm thường sẽ khắc phục vấn đề này

Khi có quá nhiều màu trắng, điều đó thường có nghĩa là có một số mã PHP trong. njs chưa được chuyển đổi hoàn toàn thành Node. mã js. Mặc dù. tệp njs có thể được phân tích cú pháp và chạy, quá nhiều màu trắng cho biết cần chuyển đổi nhiều hơn. Thông thường, nhãn cầu Node. js sẽ chỉ ra các chuyển đổi cụ thể chưa được thực hiện. Một chuyển đổi đơn giản có thể bị bỏ sót là các ký hiệu đô la [$] cần được thêm vào các biến PHP; . biến js. Việc thêm các ký hiệu đô la vào mã PHP sẽ làm giảm lượng màu trắng, mang lại sự so sánh gần hơn với lượng màu trắng phù hợp

Kiểm tra trực quan, đặc biệt là sử dụng tính năng khác biệt trực quan, nhanh hơn nhiều so với kiểm tra tương tác PHP và Node. mã js. Kiểm tra trực quan có thể hoạt động như một smoke testâ để xác định xem chuyển đổi có gần đúng không. Các trường hợp kiểm thử tự động, nằm ngoài phạm vi của cuốn sách này, cũng có thể được sử dụng để kiểm tra nhanh hiệu quả của việc chuyển đổi cho đến nay

Xuyên suốt cuốn sách, sẽ có cơ hội chuyển đổi một phần tử mã cụ thể của một lượng lớn mã PHP thành phần tử mã tương ứng cho Node. mã js. Ví dụ: một mảng kết hợp PHP được tạo bằng cách gọi hàm PHP

node hello.js
48, trong khi ở Node. js, nó thường được tạo bằng cách sử dụng ký hiệu chữ đối tượng, sử dụng dấu ngoặc nhọn [ { và } ]. Khi nội dung của toàn bộ. tập tin php được sao chép bán buôn vào một. njs khi bắt đầu chuyển đổi mã,. njs sau đó rõ ràng sẽ chứa nhiều lệnh gọi hàm PHP
node hello.js
48 sẽ cần được thay thế bằng Node. chữ đối tượng js. Một cách đơn giản để giải quyết vấn đề chuyển đổi cụ thể này có thể đơn giản là sử dụng tính năng Tìm/Thay thế của PDT của Eclipse để thực hiện tìm kiếm toàn cầu cho
node hello.js
48 và thay thế phổ biến nó bằng dấu ngoặc nhọn bên trái [ { ];

Hình 1-4.  Hộp thoại Tìm/Thay thế PDT của Eclipse

Hoạt động của hộp thoại này rất đơn giản

Thay vì bao gồm ảnh chụp màn hình của hộp thoại Tìm/Thay thế mỗi khi cần, cuốn sách này sử dụng tốc ký văn bản. Đối với các tùy chọn hộp thoại Tìm/Thay thế trong hình, văn bản sẽ được chèn lời giới thiệu sau

node hello.njs
1

Hộp thoại Tìm/Thay thế có thể được sử dụng theo hai cách khác nhau

Một cách là thực hiện cái mà tôi gọi là hành động tìm và thay thế toàn cầu "mù", giống như ví dụ giới thiệu về tìm và thay thế trong. Tôi gọi nó là blindâ vì nó tìm và thay thế tất cả các lần xuất hiện trong tệp cùng một lúc mà không có cảnh báo và không cần kiểm tra thủ công. Nếu tất cả các giá trị của hộp thoại Tìm/Thay thế được kiểm tra và xác định là có thể đánh lừa được, hành động tìm và thay thế toàn cầu âmùâ sẽ diễn ra nhanh chóng và chính xác. Thật không may, nếu kết quả gây ra lỗi, chỉ có hai lựa chọn. hoàn tác hành động hoặc thực hiện một hành động mới sửa hành động trước đó

Tùy chọn thứ hai cho công việc sửa chữa hành động tìm và thay thế đáng được chỉ ra. Đôi khi, tốt hơn là thực hiện một hành động tìm và thay thế dễ hiểu sẽ chuyển đổi chính xác 298 phần tử mã và chuyển đổi không chính xác hai phần tử mã hơn là thực hiện một hành động tìm và thay thế phức tạp chuyển đổi chính xác phần tử đó. . Tìm và sửa một vài trường hợp cạnh theo cách thủ công là một kỹ thuật đáng giá; . Mặc dù PHP đến nút. js là một nhiệm vụ kéo dài, nó không phải là nhiệm vụ mà bạn sẽ chạy đi chạy lại. Cuốn sách này không mô tả âchuyển đổi liên tụcâ; . Vì vậy, tìm và sửa thủ công một số trường hợp cạnh là một kỹ thuật hoàn toàn có thể chấp nhận được để hoàn thành công việc

Cách thứ hai để sử dụng hộp thoại Tìm/Thay thế là thực hiện từng bước hành động tìm và thay thế toàn cầu. Đầu tiên, hộp thoại Tìm/Thay thế được sử dụng để tìm phiên bản đầu tiên. Sau đó, nhà phát triển kiểm tra phiên bản và quyết định sửa đổi mã theo cách thủ công [anh ta có thể thực hiện việc này bằng cách nhấp vào mã và không bỏ qua hộp thoại] hoặc thực hiện thay thế [bằng cách nhấn nút Thay thế/Tìm] hoặc bỏ qua . Đây là giới thiệu về hành động tìm và thay thế toàn cầu từng bước

node hello.njs
2

Hộp thoại Tìm/Thay thế trong PDT của Eclipse cũng có thể sử dụng các biểu thức chính quy. Biểu thức chính quy là một kỹ thuật khớp mẫu. thay vì tìm một cụm từ chính xác, một biểu thức chính quy mô tả một mẫu để tìm kiếm. Mỗi khi mẫu được tìm thấy, cụm từ chính xác phù hợp với mẫu có thể được áp dụng cho trường Thay thế. Ví dụ: nếu biểu thức chính quy

node hello.js
49 khớp với
node hello.njs
00, thì ____201 trong biểu thức chính quy sẽ lưu văn bản
node hello.njs
02. Văn bản đã lưu này được gọi là trường chụp hoặc ít phổ biến hơn là nhóm chụp. Trong hộp thoại Tìm/Thay thế PDT của Eclipse, một trường chụp được chụp bằng cách bao quanh nó bằng dấu ngoặc đơn không giới hạn. Để áp dụng trường chụp cho trường Thay thế, các trường chụp được liệt kê theo thứ tự chúng được chụp trong trường Tìm. Ký hiệu đô la [$] cho biết rằng trường chụp đang được chỉ định, theo sau là số trường chụp. Ví dụ:
node hello.njs
03 trong trường Thay thế biểu thị trường chụp đầu tiên, trong ví dụ trước đó trong đoạn này, sẽ chứa văn bản
node hello.njs
02. Rất thường xuyên, chỉ có một trường chụp, vì vậy thường chỉ thấy
node hello.njs
03 và hiếm khi thấy
node hello.njs
06,
node hello.njs
07 hoặc hơn thế nữa

Đây là lời giới thiệu cho hành động tìm và thay thế mù toàn cầu bằng cách sử dụng biểu thức chính quy

node hello.njs
3

Trong việc chuyển đổi PHP sang Node. js, các biểu thức chính quy chỉ là tiếp tuyến của quy trình, vì vậy cuốn sách này sẽ không cung cấp hướng dẫn sơ bộ về cách hiểu và viết các biểu thức chính quy của riêng bạn. Các biểu thức chính quy sẽ được cung cấp như một phần của lời giới thiệu cho các hành động tìm và thay thế có thể được sao chép vào các trường thích hợp của hộp thoại Tìm/Thay thế trong PDT của Eclipse, thường là nguyên văn, mà không yêu cầu bạn phải hiểu hoặc sửa đổi chúng. Nếu bạn cần trợ giúp thêm về các biểu thức chính quy hoặc cần hiểu các quy tắc và cách chúng hoạt động, bạn nên tham khảo PDT của Eclipse và sử dụng Google hoặc một công cụ tìm kiếm tương tự để tìm các trang web, blog và diễn đàn sẽ trả lời các câu hỏi của bạn

Các hành động tìm và thay thế bằng các biểu thức chính quy thường toàn diện và hiệu quả hơn các hành động tìm và thay thế theo nghĩa đen [i. e. , các hành động chỉ khớp với một chuỗi cụ thể]. Một biểu thức chính quy cho phép nhiều biến thể hơn trong những gì nó có thể khớp và với các trường chụp, nó có thể vận chuyển biến thể đó đến trường Thay thế. Thông thường, tìm và thay thế theo nghĩa đen sẽ chỉ có thể khớp với phần đầu của phần tử mã hoặc phần cuối của phần tử mã cùng một lúc vì phần tử mã có thể thay đổi ở giữa. Với một biểu thức chính quy, phần giữa có thể được khớp với một mẫu cho phép khớp toàn bộ thành phần mã trong một hành động tìm và thay thế. Khi việc chuyển đổi một phần tử mã có thể được thực hiện trong một hành động tìm và thay thế duy nhất, thay vì nhiều hành động, khả năng xảy ra lỗi sẽ giảm đi

Cho đến bây giờ, chương này đã mô tả một loạt các hoạt động và kiến ​​thức về cách thiết lập môi trường phát triển để thực hiện PHP cho Node. chuyển đổi js. Điều đầu tiên cần làm là tải xuống và cài đặt Node. js và làm quen với hai tệp thực thi mà nó đi kèm. Sau đó, chúng tôi tìm hiểu về Node. js để tìm hiểu cách đọc chúng và cách sử dụng chúng để tìm ra vấn đề thực sự, tiềm ẩn là gì để vấn đề mã hóa có thể được giải quyết và sửa chữa. Sau đó, chúng tôi thiết lập PDT của Eclipse làm nền tảng cho môi trường phát triển, bao gồm cả sửa đổi để nó hiểu. njs, hướng tới PHP thành Node. chuyển đổi js. Và cuối cùng, chúng tôi đã học cách sử dụng tính năng tìm khác biệt trực quan và các hành động tìm và thay thế sẽ rất quan trọng khi thực hiện chuyển đổi

Một môi trường phát triển có khả năng là điều cần thiết để đạt được hiệu quả và là cách mà những nỗ lực lớn được thực hiện. Quá thường xuyên, các nhà phát triển nghiệp dư sẽ lao vào viết mã với một môi trường phát triển không hiệu quả hoặc thậm chí gây khó chịu. Lúc đầu, quá trình phát triển sẽ diễn ra nhanh chóng trong mọi môi trường vì một lượng nhỏ mã rất đơn giản để cải thiện. Nhưng khi cơ sở mã phát triển lớn hơn, độ phức tạp của mã cũng sẽ tăng lên và tốc độ phát triển sẽ chậm lại. Một môi trường phát triển không hiệu quả hoặc gây khó chịu sẽ không giúp được gì cho nhà phát triển về sự phức tạp, nhưng một môi trường phát triển có khả năng sẽ đơn giản hóa kiến ​​thức cần thiết và giúp nhà phát triển duy trì tốc độ và cuối cùng là hoàn thành dự án

Với một PHP đến nút. js, người ta cho rằng đã tồn tại một cơ sở mã PHP lớn. Khi kết thúc quá trình chuyển đổi, cơ sở mã dự kiến ​​sẽ có kích thước lớn hơn gấp đôi. mã PHP sẽ được cấu trúc lại để chuyển đổi, không ngắn gọn, vì vậy nó sẽ tăng lên và tất nhiên là cả một Node. js codebase sẽ được thêm vào. Cơ sở mã PHP ban đầu có thể đã được tạo bởi nhiều nhà phát triển, nhưng trong quá trình chuyển đổi, thường có quá nhiều sự kết hợp giữa các hoạt động mà chỉ một nhà phát triển duy nhất sẽ thực hiện phần lớn quá trình chuyển đổi. Mặc dù môi trường phát triển nguyên thủy có thể được chấp nhận để tạo cơ sở mã PHP gốc, nhưng sẽ cần một môi trường phát triển tinh vi hơn để chuyển đổi nó thành Node. js

Nếu một dự án đã có sẵn môi trường phát triển, có thể không cần thiết phải áp dụng Eclipse PDT. PDT của Eclipse được trình bày dưới dạng một môi trường nguyên mẫu, khả thi, chỉ phù hợp cho các hoạt động chuyển đổi. Các môi trường phát triển thay thế có thể hoạt động nếu chúng có thể hỗ trợ và kết hợp với các công cụ bổ sung hỗ trợ các tính năng trong chương này. Tóm lại, chúng cần được thực hiện để hỗ trợ tô màu cú pháp sau cho cả hai. php và. njs, so sánh song song trực quan giữa hai tệp thành so sánh từng từ chứ không chỉ so sánh từng dòng và các hành động tìm và thay thế hỗ trợ các biểu thức thông thường

Bây giờ tất cả cơ sở hạ tầng cho chuyển đổi đã sẵn sàng, chúng ta có thể chuyển sang tạo ban đầu. njs sẽ lưu trữ Nút mới. mã js. Trong chương tiếp theo, một mẫu cho một. njs sẽ được trình bày sao cho trong các chương tiếp theo, mã PHP có thể được cấu trúc lại để chuyển đổi và mã PHP thực tế có thể được sao chép vào Node. js và chuyển thành Node đang hoạt động. mã js

Làm cách nào để di chuyển từ PHP sang Node js?

Cả hai nền tảng đều có điểm mạnh và điểm yếu. Đối với một số mục đích, PHP là công cụ tốt hơn, nhưng đôi khi Node. js có nhiều thứ hơn để cung cấp cho một dự án cụ thể. .
Lên kế hoạch giới thiệu cẩn thận. .
Bắt đầu với các ứng dụng nhỏ hơn. .
Thực hiện quy trình sàng lọc mô-đun. .
Chuẩn hóa tích hợp. .
Khóa phụ thuộc

Làm cách nào để chuyển đổi mã PHP sang js?

Sử dụng trình chuyển đổi tự động .
Loại tệp. PHP
Phạm vi. Tạo phạm vi mới cho tập lệnh php của bạn để chuyển đổi
Chương trình. chọn vị trí của bạn để php. người cũ
Tranh luận. -f. $ProjectFileDir$/. /PHP-to-Javascript/in/phpstorm Watcher. php. $FileName$ $ProjectFileDir$/phpJs tập lệnh php để tạo. .
Đường dẫn đầu ra để làm mới. $ProjectFileDir$/public/js/phpjs

Tôi có thể sử dụng PHP với nút js không?

Chắc chắn, có một số lợi ích khi sử dụng Node. js dành cho nhà phát triển PHP như lập trình không đồng bộ và đồng thời . Các lợi thế khác bắt nguồn từ Node.

Bạn có thể thay thế PHP bằng nút js không?

PHP, ngược lại, là ngôn ngữ kịch bản máy chủ điều khiển mọi thứ liên quan đến back-end. Tuy nhiên, có một kịch bản mà JS và PHP có thể cạnh tranh trong cùng một lĩnh vực. Nút. js là một khung JavaScript cho phép thực thi mã JS trên máy chủ, khiến nó trở thành một giải pháp thay thế cho PHP .

Chủ Đề