Hướng dẫn php static method access property - thuộc tính truy cập phương thức tĩnh php

23

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Đây là tài sản lớp của tôi

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 một 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 cho tôi những lỗi như

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

Sau đó tôi đã thử truy cập vào tài sản như thế này self::my_paths['imagemagick'] nhưng điều đó không giúp ích gì.

Tôi nên xử lý việc này như thế nào?

hỏi ngày 9 tháng 1 năm 2012 lúc 8:32Jan 9, 2012 at 8:32

JasondavisjasondavisJasonDavis

47.3K97 Huy hiệu vàng306 Huy hiệu bạc527 Huy hiệu Đồng97 gold badges306 silver badges527 bronze badges

1

Bạn cần ký hiệu $ trước tên biến/thuộc tính, vì vậy nó trở thành:

self::$my_paths['imagemagick']

Và public static function is_image($file_path) { $imagemagick = $this->my_paths['imagemagick']. '\identify'; echo $imagemagick; } 0 không được tuyên bố là tĩnh. Vì vậy, bạn cần nó để trở thành

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

Khi nó không có từ khóa public static function is_image($file_path) { $imagemagick = $this->my_paths['imagemagick']. '\identify'; echo $imagemagick; } 1 phía trước nó, nó hy vọng sẽ được khởi tạo trong một đối tượng.

Đã trả lời ngày 9 tháng 1 năm 2012 lúc 8:36Jan 9, 2012 at 8:36

1

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

Đã trả lời ngày 9 tháng 1 năm 2012 lúc 8:35Jan 9, 2012 at 8:35

HeadshotaheadshotaHeadshota

20,5K11 Huy hiệu vàng59 Huy hiệu bạc79 Huy hiệu đồng11 gold badges59 silver badges79 bronze badges

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'];

Đã trả lời ngày 9 tháng 1 năm 2012 lúc 8:38Jan 9, 2012 at 8:38

Ahmad Hajjarahmad HajjarAhmad Hajjar

1.7963 huy hiệu vàng20 Huy hiệu bạc32 Huy hiệu đồng3 gold badges20 silver badges32 bronze badges

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

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

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

Đã trả lời ngày 9 tháng 1 năm 2012 lúc 8:37Jan 9, 2012 at 8:37

Grrbrr404Grrbrr404Grrbrr404

1.80915 Huy hiệu bạc17 Huy hiệu đồng15 silver badges17 bronze badges

Các phương thức tĩnh trong một lớp không thể truy cập các thuộc tính không tĩnh trong cùng một lớp.

Bởi vì các phương thức tĩnh có thể gọi được mà không có một thể hiện của đối tượng được tạo ra, nên public static function is_image($file_path) { $imagemagick = $this->my_paths['imagemagick']. '\identify'; echo $imagemagick; } 3 biến giả không có sẵn bên trong phương thức được khai báo là tĩnh.

Nếu bạn không truy cập các thuộc tính của cùng một lớp thì bạn phải định nghĩa chúng là tĩnh.

Example: class A{ public function __construct(){ echo "I am Constructor of Class A !!<br>"; } public $testVar = "Testing variable of class A"; static $myStaticVar = "Static variable of Class A ..!<br>"; static function myStaticFunction(){ //Following will generate an Fatal error: Uncaught Error: Using $this when not in object context echo $this->testVar; //Correct way to access the variable.. echo Self::$myStaticVar; } } $myObj = new A(); A::myStaticFunction();

Đã trả lời ngày 11 tháng 1 năm 2020 lúc 8:36Jan 11, 2020 at 8:36

Làm thế nào để bạn truy cập thuộc tính lớp trong một phương thức tĩnh?

Các thuộc tính tĩnh được truy cập bằng toán tử phân giải phạm vi (::) và không thể được truy cập thông qua toán tử đối tượng ( ->). Có thể tham chiếu lớp bằng một biến. Giá trị của biến không thể là một từ khóa (ví dụ: tự, cha mẹ và tĩnh).using the Scope Resolution Operator ( :: ) and cannot be accessed through the object operator ( -> ). It's possible to reference the class using a variable. The variable's value cannot be a keyword (e.g. self , parent and static ).

Làm thế nào có thể truy cập không

Để truy cập một thuộc tính hoặc phương thức không tĩnh, bạn nối toán toán tử đối tượng vào $ từ khóa này.Để truy cập các thuộc tính hoặc phương thức tĩnh bên trong lớp, bạn sử dụng từ khóa tự, theo sau là độ phân giải phạm vi hoặc toán tử hai đại tá.append the object operator to $this keyword. To access static properties or methods inside the class, you use the self keyword followed by the scope resolution, or the double-colon, operator.

Phương pháp và tính chất tĩnh trong PHP là gì?

Giới thiệu về các phương thức tĩnh và thuộc tính PHP cho phép bạn truy cập các phương thức và thuộc tính trong bối cảnh của một lớp chứ không phải là một đối tượng.Các phương pháp và thuộc tính như vậy là các phương thức và thuộc tính lớp.Phương pháp lớp và thuộc tính lớp được gọi là phương thức và thuộc tính tĩnh.Class methods and class properties are called static methods and properties.

Phương pháp tĩnh có thể là PHP riêng không?

Có, chúng ta có thể có các phương thức riêng tư hoặc phương thức tĩnh riêng trong giao diện trong Java 9. Chúng ta có thể sử dụng các phương thức này để loại bỏ dự phòng mã.Các phương thức riêng tư chỉ có thể hữu ích hoặc chỉ có thể truy cập trong giao diện đó.Chúng tôi không thể truy cập hoặc kế thừa các phương thức riêng tư từ giao diện này sang giao diện hoặc lớp khác.. We can use these methods to remove the code redundancy. Private methods can be useful or accessible only within that interface only. We can't access or inherit private methods from one interface to another interface or class.

Chủ đề