Hàm toàn cầu PHP

Giống như nhiều người khác, tôi thích sử dụng PHP thủ tục làm ngôn ngữ mẫu. Mặc dù cú pháp của PHP làm cho nó trở thành một lựa chọn thiết thực cho việc này, nhưng có một vấn đề với việc nhúng nội dung động. Hầu hết các ứng dụng PHP tạo ra đầu ra HTML, vì vậy cuối cùng bạn sẽ viết rất nhiều bằng cách sử dụng kỹ thuật này. Hoặc bạn quên nó và làm cho ứng dụng của bạn dễ bị tấn công XSS khó chịu

Ngoài sự khó chịu khi gõ thừa, còn có nguy cơ trở nên lười biếng khi thấy rằng ngắn hơn đáng kể để gõ. Trong một số trường hợp, nó cũng sẽ không biểu hiện thành vấn đề, vì một số loại nội dung không bao giờ chứa các ký tự đặc biệt HTML [ví dụ: Số]. Điều này đặc biệt khó chịu, vì các lỗi trong lớp xem nổi tiếng là khó theo dõi và không giống như SQL-injections — một vấn đề tương tự — hậu quả có xu hướng gây hại cho người dùng của một trang web, thay vì trực tiếp đến trang web đó.

HÔN

Gần đây, tôi đã xem qua một số mã được viết cho CakePHP. Mắt tôi bắt gặp một chức năng e, là viết tắt của echo. Một chữ cái, hàm thông thường chắc chắn là cách đơn giản nhất để mở rộng cú pháp của PHP. Nghĩ về nó, nó khá rõ ràng, nhưng nó chưa bao giờ xảy ra với tôi.
Chà, các nhà phát triển CakePHP đã nhầm lẫn, vì lẽ ra nó phải là viết tắt của echo htmlspecialchars. Tuy nhiên, cú pháp hoạt động tốt. Vì vậy, tôi bắt đầu sử dụng một chức năng được xác định trên toàn cầu trông giống như thế này.


function e[$string] {
  echo htmlspecialchars[$string];
}

Và nó cũng hoạt động. Nó giúp tôi tiết kiệm khi nhập và giúp tôi không quên thoát đầu ra, bởi vì tôi phải làm nhiều việc hơn để xuất ra các chuỗi không thoát, hơn là không. Đơn giản, nhưng mạnh mẽ

Cuộc đụng độ

Tuy nhiên đang có một vấn đề; . Tôi đã biết về ít nhất một cuộc đụng độ tên có thể xảy ra, vì tôi có ý tưởng từ CakePHP

Cách thông thường để giải quyết vấn đề này, sẽ là với các không gian tên, nhưng — than ôi — PHP không có [chưa] có các không gian tên và giải pháp phổ biến là các không gian tên giả [Ví dụ:. tiền tố tên] không hoạt động ở đây, vì nó sẽ thách thức mục đích của chức năng ngay từ đầu

Có một vấn đề khác nữa. Trong một số ít trường hợp, khi chúng tôi không hiển thị đầu ra HTML/XML, chúng tôi không muốn thoát các chuỗi để nhúng vào HTML/XML — thay vào đó, chúng tôi muốn thoát chuỗi để nhúng vào ngôn ngữ đích đó. Ngay cả trong HTML, có thể cần thoát chuỗi bằng htmlentities, thay vì htmlspecialchars, nếu mã hóa văn bản không phải là ISO-8859-1. Hoặc mã hóa chuỗi thành UTF-8, nếu mẫu ở dạng UTF-8

Làm tĩnh động

Vấn đề với tất cả những điều này là hàm tĩnh — Đó là bản chất của hàm toàn cục trong PHP. Các ngôn ngữ thông dịch khác cho phép chúng tôi xác định lại các chức năng trong thời gian chạy, nhưng PHP thì không may mắn như vậy [Chà, nói đúng ra, runkit cho phép điều đó, nhưng không ai trong tâm trí của họ sẽ sử dụng nó trong môi trường sản xuất].
Tuy nhiên, có một kẽ hở; .


if [!function_exists['e']] {
  function e[$args] {
    $args = func_get_args[];
    return call_user_func_array[$GLOBALS['_global_function_handler_e'], $args];
  }
}

Tốt hơn nhiều - Bây giờ tôi có thể định nghĩa trình xử lý đầu ra của riêng mình là


$GLOBALS['_global_function_handler_e'] = 'my_global_function_handler_e';
function my_global_function_handler_e[$string] {
  echo htmlspecialchars[$string];
}

Và CakePHP có thể sử dụng


$GLOBALS['_global_function_handler_e'] = 'cakephp_global_function_handler_e';
function cakephp_global_function_handler_e[$string] {
  echo htmlspecialchars[$string];
}

Chúng tôi vẫn đang sử dụng một biểu tượng toàn cầu, nhưng ít nhất nó là biểu tượng động chứ không phải tĩnh

Vì vậy, đây là lời cầu xin dành cho những người viết framework trong thế giới PHP. Nếu tất cả chúng ta có thể đồng ý làm điều này cho bất kỳ chức năng nào, được xác định trong phạm vi toàn cầu, có nguy cơ trùng tên rõ ràng, tôi nghĩ tất cả chúng ta sẽ tốt hơn

Tất nhiên chỉ là một gợi ý khiêm tốn

Chia sẻ bài viết này

Troels Knak-Nielsen

Troels đã tạo ra các ứng dụng web, với tư cách là một người làm việc tự do và đồng thời được tuyển dụng bởi các công ty thuộc nhiều quy mô khác nhau, kể từ khoảng thời gian bùng nổ bong bóng CNTT. Hiện tại, anh ấy đang làm việc trên các hệ thống phụ trợ cho một ISP của Đan Mạch. Trong thời gian rảnh rỗi, anh ấy phát triển và duy trì Konstrukt, một khung ứng dụng web cho PHP và là người tổ chức cuộc gặp gỡ PHP hàng tháng tại Copenhagen

Trong bất kỳ ngôn ngữ lập trình nào, biến toàn cục là những biến được khai báo bên ngoài phương thức hoặc hàm, chúng cũng có thể được khai báo bên trong hàm. Biến toàn cục cũng giống như bất kỳ biến nào khác nhưng điểm khác biệt là phạm vi này là toàn cầu trong ứng dụng. Nếu chúng ta biến bất kỳ biến nào thành toàn cầu thì chúng ta có thể truy cập biến đó từ toàn bộ ứng dụng của mình, điều đó có nghĩa là bên trong hoặc bên ngoài tập lệnh. Biến toàn cục hoạt động theo cùng một cách ở mọi nơi, như tên gọi, cho thấy chúng là toàn cầu đối với các tài nguyên khác. Trong phần tới, chúng ta sẽ thảo luận chi tiết hơn về Biến toàn cầu PHP này

Gói phát triển phần mềm tất cả trong một[hơn 600 khóa học, hơn 50 dự án]

Giá
Xem khóa học

600+ Khóa học trực tuyến. hơn 50 dự án. Hơn 3000 giờ. Giấy chứng nhận có thể kiểm chứng. Truy cập Trọn đời
4. 6 [84.212 xếp hạng]

cú pháp

Bắt đầu khóa học phát triển phần mềm miễn phí của bạn

Phát triển web, ngôn ngữ lập trình, kiểm thử phần mềm và những thứ khác

Chúng có thể được khai báo giống như bất kỳ biến nào khác. Nhưng để truy cập chúng, chúng ta cần tuân theo một số tiêu chuẩn. Đầu tiên, chúng ta sẽ xem cách khai báo một biến toàn cục trong PHP có thể được truy cập ở bất kỳ đâu trong ứng dụng. Xem bên dưới;

$variable = your_value;

Như bạn có thể thấy ở đây, chúng ta chỉ cần xác định tên biến nhưng đối với điều này, chúng ta sử dụng ký hiệu '$'. Sau này, chúng ta có thể gán bất kỳ giá trị nào cho biến mà chúng ta muốn. Để hiểu rõ hơn, chúng ta sẽ xem một cú pháp thực hành có thể được sử dụng trong chương trình khi viết mã;

e. g


if [!function_exists['e']] {
  function e[$args] {
    $args = func_get_args[];
    return call_user_func_array[$GLOBALS['_global_function_handler_e'], $args];
  }
}

0

Biến toàn cầu hoạt động như thế nào trong PHP?

Như bây giờ chúng ta biết rằng các biến toàn cục được khai báo trên toàn cầu để sử dụng ở mọi nơi trong ứng dụng. Biến này giống như bất kỳ biến nào khác trong PHP. Ngoài ra, các biến này cũng có thể được truy cập từ bên trong hoặc bên ngoài hàm. Như chúng ta đã thảo luận trước đó rằng chúng ta chỉ khai báo chúng giống như các biến khác, nhưng để truy cập chúng, chúng ta cần tuân theo một số tiêu chuẩn được xác định bởi PHP. Vì vậy, ở đây chúng ta sẽ thảo luận về cách sử dụng chúng bên trong hàm và cách khai báo chúng. Để hiểu rõ hơn, chúng ta sẽ xem một ví dụ để người mới bắt đầu hiểu rõ hơn về biến toàn cục. Nhưng trước khi tiếp tục, chúng tôi sẽ thảo luận về một số thuộc tính của nó để truy cập các biến toàn cục, chúng tôi cũng sẽ xem nơi chúng tôi lưu trữ biến toàn cầu của mình. Trong PHP, nó duy trì một mảng nơi nó lưu trữ tất cả các biến toàn cục mà chúng ta đã xác định trong một ứng dụng. Bằng cách sử dụng mảng này, chúng ta có thể truy cập biến này trong và ngoài tập lệnh. Hãy thảo luận về một số điểm quan trọng đối với biến toàn cục để sử dụng chúng bên trong ứng dụng, xem bên dưới;

1] Mảng toàn cục

Trong PHP, chúng tôi sử dụng một mảng để truy cập biến toàn cầu này. Giống như bất kỳ ngôn ngữ lập trình nào khác, nó duy trì lịch sử của biến toàn cục trong một mảng. Nếu chúng ta muốn truy cập bất kỳ phần tử hoặc biến cụ thể nào từ mảng thì chúng ta phải chuyển tên chính xác của biến để truy cập chúng. Hãy xem cú pháp cho điều này, xem bên dưới;

cú pháp


if [!function_exists['e']] {
  function e[$args] {
    $args = func_get_args[];
    return call_user_func_array[$GLOBALS['_global_function_handler_e'], $args];
  }
}

1

Như bạn có thể thấy trong các dòng mã trên, chúng tôi đang sử dụng từ khóa ‘$GLOBALS’ để truy cập chúng, theo sau là dấu ngoặc vuông. Bên trong dấu ngoặc này, chúng ta phải đặt tên biến mà chúng ta muốn truy cập. Hãy xem một ví dụ thực hành để hiểu rõ hơn, xem bên dưới;

e. g.


if [!function_exists['e']] {
  function e[$args] {
    $args = func_get_args[];
    return call_user_func_array[$GLOBALS['_global_function_handler_e'], $args];
  }
}

2

2] Truy cập chúng bên trong hàm trong PHP

NẾU chúng ta muốn truy cập biến toàn cục bên trong bất kỳ hàm hoặc phương thức nào thì chúng ta có thể sử dụng từ khóa 'toàn cầu'. Sau khi đề cập đến tên biến với cái này, chúng ta có thể sử dụng chúng trong suốt hàm mà không cần từ khóa toàn cầu. Để hiểu rõ hơn, chúng ta sẽ xem một cú pháp để sử dụng chúng bên trong hàm, xem bên dưới;

cú pháp


if [!function_exists['e']] {
  function e[$args] {
    $args = func_get_args[];
    return call_user_func_array[$GLOBALS['_global_function_handler_e'], $args];
  }
}

3

Như bạn có thể thấy trong ví dụ trên, chúng ta đang sử dụng từ khóa toàn cục để truy cập biến bên trong hàm. Nhưng sau khi được xác định, chúng tôi đang trực tiếp sử dụng chúng mà không cần từ khóa toàn cầu. Bây giờ chúng ta sẽ xem xét một số lợi thế của việc sử dụng biến toàn cục trong ứng dụng như sau;

Dưới đây là một số điểm cần được xem xét khi sử dụng từ khóa toàn cầu trong PHP;

  • NẾU bạn muốn xác định một biến toàn cục, bạn có thể sử dụng '$' theo sau là tên biến của bạn
  • Biến này có thể được truy cập bên trong hoặc bên ngoài các chức năng nhưng để truy cập chúng, chúng ta phải từ khóa 'toàn cầu'
  • Chúng tôi truy cập biến toàn cục bên trong thứ này bằng cách sử dụng mảng toàn cầu duy trì tất cả các biến được xác định trong ứng dụng
  • Nhưng hãy nhớ rằng biến phải là duy nhất nếu không nó sẽ ghi đè như bất kỳ ngôn ngữ lập trình nào khác
  • Để truy cập biến trực tiếp từ mảng, chúng ta phải sử dụng từ khóa ‘$GLOBALS’ theo sau là tên biến giống như chúng ta truy cập một mảng theo chỉ số của nó
  • Ưu điểm của việc sử dụng biến toàn cục là chúng tôi có thể yêu cầu tên người dùng đã đăng nhập ở mọi nơi trong ứng dụng, do đó, bằng cách sử dụng nó, chúng tôi có thể lưu trữ chúng vào biến toàn cục và chúng tôi có thể dễ dàng truy cập trong khi ứng dụng. Cái nào sẽ tiết kiệm bộ nhớ và cũng cung cấp tối ưu hóa mã

ví dụ

Trong ví dụ này, chúng tôi đang khai báo một biến toàn cục và cố gắng in và nối chúng. Chương trình đơn giản cho người mới bắt đầu với biến toàn cục trong PHP

Ví dụ 1

Mã số


if [!function_exists['e']] {
  function e[$args] {
    $args = func_get_args[];
    return call_user_func_array[$GLOBALS['_global_function_handler_e'], $args];
  }
}

4

đầu ra

Ví dụ #2

Trong ví dụ này, chúng ta đang cố truy cập biến toàn cục từ hàm bằng cách sử dụng một mảng

Mã số


if [!function_exists['e']] {
  function e[$args] {
    $args = func_get_args[];
    return call_user_func_array[$GLOBALS['_global_function_handler_e'], $args];
  }
}

5

đầu ra

Phần kết luận

Bằng cách sử dụng biến toàn cục, chúng ta có thể truy cập các biến trong toàn bộ ứng dụng của mình, những biến này rất hữu ích khi chúng ta phải sử dụng cùng một giá trị trong toàn bộ ứng dụng, ví dụ như tên người dùng, mật khẩu và rất nhiều chi tiết khác tùy thuộc vào yêu cầu. Chúng ta chỉ cần tuân theo một số tiêu chuẩn khi truy cập chúng bên trong hàm

Bài viết được đề xuất

Đây là hướng dẫn về Biến toàn cầu PHP. Ở đây chúng ta thảo luận về định nghĩa Biến toàn cầu PHP, Cách thức hoạt động của Biến toàn cầu trong PHP cùng với các ví dụ tương ứng. Bạn cũng có thể xem các bài viết sau để tìm hiểu thêm –

Làm cách nào để sử dụng toàn cầu trong PHP?

Truy cập biến toàn cục bên trong hàm. Các cách để truy cập biến toàn cục bên trong các hàm là. .
Sử dụng từ khóa toàn cầu
Sử dụng mảng GLOBALS[var_name]. Nó lưu trữ tất cả các biến toàn cục trong một mảng có tên $GLOBALS[var_name]. Var_name là tên của biến

chức năng của toàn cầu là gì?

Các hàm chung là các hàm tùy chỉnh có thể được gọi từ các hành động tùy chỉnh được định cấu hình cho yêu cầu, thay đổi hoặc lịch trình tùy chỉnh, bất cứ khi nào cần thiết .

Làm cách nào để tạo một mảng toàn cầu trong PHP?

Có hai cách để tham chiếu biến toàn cục trong PHP. .
Sử dụng từ khóa toàn cầu khi bắt đầu mọi chức năng sử dụng biến
Sử dụng mảng $GLOBALS

Biến toàn cục tự động PHP là gì?

Đây là biến 'siêu toàn cục' hoặc toàn cục tự động. Điều này đơn giản có nghĩa là nó có sẵn trong tất cả các phạm vi trong toàn bộ tập lệnh . Không cần phải làm $variable toàn cầu; . Không giống như tất cả các siêu toàn cầu khác, $GLOBALS về cơ bản luôn có sẵn trong PHP.

Chủ Đề