2016-10-14 30 views
6

Tôi cần sử dụng tên hàm biến cho dự án mà tôi đang làm việc nhưng đã gặp phải một số vấn đề lạ. Tên hàm kết thúc thành một phần tử chuỗi trong một mảng.Chức năng biến PHP Giá trị mảng

này hoạt động:

$func = $request[2]; 
$pages->$func(); 

này không:

$pages->$request[2](); 

Và tôi không thể tìm ra lý do tại sao. Nó ném một mảng đến lỗi chuyển đổi chuỗi, như thể nó bỏ qua rằng tôi đã cung cấp một khóa cho một phần tử cụ thể. Đây có phải là cách nó hoạt động hoặc tôi đang làm điều gì sai? cú pháp

Trả lời

6

Đối với php 5, bạn có thể sử dụng xoăn-chuẩn bị tinh thần:

$pages->{$request[2]}(); 

Ví dụ đơn giản, đủ để tái sản xuất:

<?php 

$request = [ 
    2 => 'test' 
]; 

class Pages 
{ 
    function test() 
    { 
     return 1; 
    } 
} 

$pages = new Pages(); 

echo $pages->{$request[2]}(); 

Ngoài ra (như bạn đã nêu trong câu hỏi):

$methodName = $request[2]; 
$pages->$methodName(); 

Trích dẫn từ php.net cho php 7 trường hợp:

truy cập gián tiếp đến các biến, thuộc tính và phương pháp bây giờ sẽ có đánh giá đúng theo thứ tự từ trái sang phải, như trái ngược với trộn trước các trường hợp đặc biệt.

Cũng có một bảng cho php 5php 7 khác biệt về vấn đề này ngay dưới quote trong các tài liệu tôi đã cung cấp ở đây.

Những điều bạn nên cân nhắc:

  • Kiểm tra giá trị của $request[2] (là nó thực sự là một chuỗi ?).
  • Kiểm tra phiên bản của php (là nó php 5 + hoặc php 7+?).
  • Kiểm tra hướng dẫn sử dụng trên variable functions cho bản phát hành của bạn.
+0

Cảm ơn bạn! Tôi đã tìm kiếm tài liệu bao gồm điều này và không thể tìm thấy nó. Tôi sẽ chấp nhận câu trả lời của bạn ngay sau khi bộ đếm thời gian cho phép tôi. – user1377362

+1

Đánh bại tôi quá, +1 cũng có thể (có thể?) Sử dụng lớp ReflectionFunction và gọi, nhưng đó là một chút overkill cho việc này. http://php.net/manual/en/class.reflectionfunction.php – ArtisticPhoenix

+0

@ArtisticPhoenix yeah, cũng có 'call_user_func()'. Tuy nhiên, tôi tin rằng câu hỏi này là về cú pháp nhiều hơn là giải pháp cho một vấn đề. – BlitZ

Các vấn đề liên quan