2010-05-12 38 views
5

Tôi mới đến PHP và đang tìm hiểu về các chức năng PHP từ w3schools. Nó nói: "PHP cho phép một cuộc gọi chức năng để được thực hiện khi tên hàm là một biến"Tại sao chương trình PHP này không hoạt động?

chương trình này làm việc

<?php 
$v = "var_dump"; 
$v('foo'); 
?> 

Nhưng chương trình này đã không làm việc:

<?php 
$v = "echo"; 
$v('foo'); 
?> 

Nhưng nếu Tôi làm echo('foo'); nó hoạt động.

Tôi đang làm gì sai?

+1

Tôi nghĩ rằng bài viết của bạn đã sai lầm. Không có gì sau khi "chương trình này hoạt động" –

+1

những gì đã làm việc và không hoạt động? – Shiki

Trả lời

15

Tính năng này của PHP được gọi là Các chức năng biến.

Vấn đề ở đây là với echo đó là không thực sự là một chức năng nhưng một cấu trúc ngôn ngữ và chức năng biến thể chỉ được sử dụng với chức năng. Trong ví dụ đầu tiên của bạn var_dump là một hàm và nó hoạt động tốt.

Từ PHP doc cho Variable functions:

chức năng Variable sẽ không làm việc với ngôn ngữ xây dựng như echo(), in(), unset(), isset(), trống() , bao gồm(), yêu cầu() và tương tự. Sử dụng các hàm bao bọc để sử dụng bất kỳ các cấu trúc nào như các hàm biến.

Bạn có thể tận dụng printf chức năng ở vị trí của echo như:

$e = "printf"; // printf is a function not a language construct. 
$e('foo'); 

hoặc bạn có thể viết một hàm wrapper cho echo như:

$e = "echo_wrapper"; 
$e('foo'); 

function echo_wrapper($input) { // wrapper function that uses echo. 
     echo $input; 
} 
+0

@Shiki: 'print()' cũng sẽ không hoạt động.Bạn có thể sử dụng 'printf()'. – codaddict

+0

bạn nói đúng. oops – Shiki

+0

Ngoài ra, nếu bạn thực sự cần phải làm điều này (không thể nghĩ về một tình huống mà bạn sẽ) bạn có thể quấn tiếng vang trong một hàm chức năng echoIt ($ string) { echo $ string; } $ v = 'echoIt'; $ v ('foo'); – David

1

echo không phải là một chức năng! Bạn có thể sử dụng printf đó là một chức năng và nó có thể được sử dụng để in ra một cái gì đó.

+0

Không cần phải hét! Mặc dù tôi đồng ý thực tế là không rõ ràng và thiết kế ngôn ngữ nghèo nàn. – erisco

0

Có hai vấn đề có thể, và bạn nên giải quyết chúng cả:

  1. rằng tính năng chỉ hoạt động trong PHP 5.3, với tất cả sự hồi ức của tôi. Đó là phiên bản chính mới nhất, vì vậy bạn nên đảm bảo rằng bạn đang sử dụng nó. Rất có thể là bạn không.
  2. echo không phải là chức năng, mà là một cấu trúc ngôn ngữ PHP. Bạn sẽ cần phải viết một hàm bao bọc mà echoes những gì đã được chuyển cho nó.
+0

Các chức năng biến được giới thiệu từ lâu trước PHP 5.3. Tôi không biết số phiên bản chính xác mặc dù. – erisco

0

này hoạt động:

$v = "printf"; 
$v('foo'); 
Các vấn đề liên quan