2012-01-09 32 views
12

Dưới đây là tài sản lớp học của tôiCách tốt nhất để truy cập vào bất động sản Lớp bên trong một phương pháp tĩnh với PHP

private $my_paths = array(
     'imagemagick' => 'E:\Server\_ImageOptimize\ImageMagick', 
     'pngcrush' => 'E:\Server\_ImageOptimize\pngCrush\pngcrush.exe', 
     'jpegtran' => 'E:\Server\_ImageOptimize\jpegtran\jpegtran.exe', 
     'gifsicle' => 'E:\Server\_ImageOptimize\gifsicle\gifsicle.exe', 
     'pngquant' => 'E:\Server\_ImageOptimize\pngquant\pngquant.exe', 
     'pngout' => 'E:\Server\_ImageOptimize\pngout\pngout.exe' 
); 

Có một phương pháp tĩnh trong cùng lớp ...

public static function is_image($file_path) 
{ 

    $imagemagick = $this->my_paths['imagemagick']. '\identify'; 

    echo $imagemagick; 
} 

Tất nhiên điều này mang lại cho cho tôi lỗi như

Fatal error: Using $this when not in object context... 

Sau đó tôi đã thử truy cập thuộc tính như thế này self::my_paths['imagemagick'] nhưng điều đó không có tác dụng.

Tôi nên xử lý điều này như thế nào?

+0

Làm cho họ tĩnh và 'self' sẽ làm việc – matino

Trả lời

19

Bạn cần dấu $ trước tên biến/tài sản, vì vậy nó trở thành:

self::$my_paths['imagemagick'] 

Và my_paths không được khai báo là tĩnh. Vì vậy, bạn cần nó là

private static $my_paths = array(...); 

Khi từ khóa không có từ khóa "tĩnh" ở phía trước, nó sẽ được khởi tạo trong một đối tượng.

+0

Đó là vấn đề của tôi, thiếu '$' khi tôi sẽ cố gắng một thuộc tính tĩnh nhờ – JasonDavis

4

bạn không thể truy nhập thuộc tính không tĩnh trong phương thức tĩnh, bạn nên tạo một đối tượng của đối tượng trong phương thức hoặc khai báo thuộc tính tĩnh.

0

Nếu có thể, bạn cũng có thể biến my_path biến tĩnh của mình.

self::my_paths['imagemagick'] không hoạt động vì mảng là riêng tư và không thể sử dụng trong ngữ cảnh tĩnh.

Biến biến tĩnh của bạn và nó sẽ hoạt động.

1

làm cho nó thuộc tính tĩnh

private static $my_paths = array(
    'imagemagick' => 'E:\Server\_ImageOptimize\ImageMagick', 
    'pngcrush' => 'E:\Server\_ImageOptimize\pngCrush\pngcrush.exe', 
    'jpegtran' => 'E:\Server\_ImageOptimize\jpegtran\jpegtran.exe', 
    'gifsicle' => 'E:\Server\_ImageOptimize\gifsicle\gifsicle.exe', 
    'pngquant' => 'E:\Server\_ImageOptimize\pngquant\pngquant.exe', 
    'pngout' => 'E:\Server\_ImageOptimize\pngout\pngout.exe' 
    ); 

và gọi nó như thế này

self::$my_paths['pngcrush']; 
Các vấn đề liên quan