Tôi nhận ra đây là một câu hỏi cũ nhưng đây là một số thông tin cụ thể hơn về cách PHP xử lý các câu hỏi mà OP yêu cầu.
Đây là trang từ tài liệu tham khảo PHP mà bạn muốn bắt đầu với:
Introduction to Variables
tôi biết liên kết không được ưa chuộng nhưng liên kết nên được ổn định và tôi không muốn bán buôn sao chép tài liệu tham khảo PHP. Dưới đây là những điểm nổi bật.
OP: PHP biết loại biến đó sử dụng như thế nào (hay không)?
PHP được viết bằng C và sử dụng một typedef struct C mà họ gọi là zval cùng với một C đoàn typedef đó là kêu gọi một zval_value để đại diện cho tất cả các biến.
typedef struct _zval_struct {
zvalue_value value; /* variable value */
zend_uint refcount__gc; /* reference counter */
zend_uchar type; /* value type */
zend_uchar is_ref__gc; /* reference flag */
} zval;
"Động cơ cố gắng để che đậy sự phức tạp của khái niệm của một biến có thể là bất kỳ loại bằng cách cung cấp một bộ đồng phục và trực quan tập hợp các macro để truy cập vào các cấu trúc trên nhiều lĩnh vực."
"PHP là ngôn ngữ động, được nhập lỏng lẻo, sử dụng tính năng sao chép và ghi tham chiếu". Tham chiếu Đếm và Sao chép-ghi-ghi (COW) là hai khái niệm mạnh mẽ mà PHP sử dụng mà tôi sẽ không đi vào đây nhưng đáng đọc.
"Nhập sai là ẩn tùy chọn của công cụ để chuyển đổi hoặc ép buộc các biến vào loại được yêu cầu tại thời điểm thực hiện. Tính tham chiếu là phương tiện mà động cơ có thể suy ra khi biến không còn tham chiếu nào trong mã người dùng và do đó có thể giải phóng các cấu trúc liên quan đến biến đó. "
"Các zval_value là một sự kết hợp mà có thể đại diện cho tất cả các loại một biến có thể giữ."
"... một biến thể của một loại, dữ liệu biến được đại diện bởi các trường thích hợp trong Bản thân zval giữ loại, số tham chiếu và cờ để cho biết biến có phải là tham chiếu hay không. "
PHP biên dịch như thế nào?
"Biên dịch" là một từ rộng có thể có ý nghĩa khác và PHP không biên dịch theo nghĩa truyền thống. Nó thực hiện một loại biên dịch trước khi chuyển đổi mã nguồn thành các mã opcode là các lệnh có thể được thực thi bởi bộ xử lý. Các opcodes này được lưu trữ để ngăn PHP phải phân tích cú pháp các tập lệnh được gọi thường xuyên.
Làm cách nào để biết loại biến thể sẽ là gì? Liệu nó có quan tâm không?
Như đã trích dẫn ở trên nó là động cơ của PHP "sở thích để chuyển đổi, hoặc ép buộc biến thành các loại yêu cầu tại thời gian thực hiện." Baiscally PHP luôn lưu trữ những gì nó xác định kiểu của biến khi nó được tạo ra nhưng khi một biến được tham chiếu, PHP thực hiện một quyết định khác về kiểu dựa trên ngữ cảnh mà nó đang được sử dụng.
"PHP là yếu gõ, như vậy động cơ cung cấp các hàm API để chuyển đổi biến từ kiểu này sang kiểu khác."
Động cơ có một tập hợp các macro nó sử dụng để làm việc với các zvals để chuyển đổi một loại biến để bạn thường không phải đối phó với điều đó.
Nếu bạn muốn xem những gì zvals trông giống như trong hành động mà họ có thể được đổ với:
debug_zval_dump($variableName);
Nó cũng đáng chú ý là có một số ngôn ngữ, chẳng hạn như Haskell, nơi bạn có thể viết một cái gì đó như 'x = f 1000', và nó sẽ * suy ra * kiểu 'x' - tìm ra nó phải là gì, dựa trên kiểu' f', vv. Về biên dịch, nó sẽ trông giống C; về tuyên bố, nó sẽ trông giống PHP hơn. Tất nhiên, PHP hoạt động giống như trò chơi ăn gian. –