2010-02-18 26 views
44

Tôi có phương pháp này mà tôi muốn sử dụng $ this trong nhưng tất cả tôi nhận được là: Lỗi nghiêm trọng: Sử dụng $ this khi không có trong bối cảnh đối tượng.Sử dụng chức năng này bên trong một hàm tĩnh thất bại

Làm cách nào để làm việc này?

public static function userNameAvailibility() 
{ 
    $result = $this->getsomthin(); 
} 

Trả lời

79

Đây là cách đúng

public static function userNameAvailibility() 
{ 
    $result = self::getsomthin(); 
} 

Sử dụng self:: thay vì $this-> cho phương pháp tĩnh.

Xem: PHP Static Methods Tutorial để biết thêm :)

+0

đúng, tôi sắp đăng câu trả lời này. –

+7

Bạn cũng nên nhớ rằng phương thức getomthin() cũng phải tĩnh - Bạn không thể gọi không tĩnh trong một phương thức tĩnh. – thorinkor

+7

@ Sarfraz, không nên là «static ::' thay vì 'self ::'? – Pacerier

8

Bạn không thể sử dụng $this bên trong hàm tĩnh, bởi vì các hàm tĩnh độc lập với bất kỳ đối tượng được khởi tạo nào. Thử làm cho chức năng không tĩnh.

Sửa: Theo định nghĩa, phương pháp tĩnh có thể được gọi mà không cần bất kỳ đối tượng khởi tạo, và do đó không có sử dụng ý nghĩa của $this bên trong một phương pháp tĩnh.

+0

Nên có khi bạn đang cố gắng để gán tĩnh biến thành một biến mẫu. Đây có phải là possibel không? – Jom

2

Người truy cập this là trường hợp hiện tại của lớp học. Vì các phương thức tĩnh không chạy khỏi cá thể, sử dụng this bị chặn. Vì vậy, một trong những cần phải gọi phương pháp trực tiếp ở đây. Phương thức tĩnh không thể truy cập bất cứ thứ gì trong phạm vi của cá thể, nhưng truy cập mọi thứ trong phạm vi lớp bên ngoài phạm vi cá thể.

1

Chỉ chức năng tĩnh có thể được gọi là trong phạm vi chức năng tĩnh nhờ sủ dụng tự :: nếu lớp của bạn có chứa chức năng không tĩnh mà bạn muốn sử dụng thì bạn có thể khai báo các trường hợp của cùng một lớp và sử dụng nó.

<?php 
class some_class{ 
function nonStatic() { 
    //..... Some code .... 
    } 
Static function isStatic(){ 
    $someClassObject = new some_class; 
    $someClassObject->nonStatic(); 
    } 
} 
?> 
0

Thật đáng tiếc là PHP không hiển thị lỗi đủ mô tả. Bạn không thể sử dụng $ this-> bên trong một hàm tĩnh, mà là sử dụng self :: nếu bạn phải gọi một hàm bên trong cùng một lớp

1

Đây là một ví dụ về những gì xảy ra khi một phương thức của một lớp được gọi trong một cách sai lầm. Bạn sẽ thấy một số cảnh báo khi thực thi mã này nhưng nó sẽ hoạt động và sẽ in: "Tôi là A: in ấn B tài sản". (Đã thực hiện trong php5.6)

class A { 
    public function aMethod() { 
     echo "I'm A: "; 
     echo "printing " . $this->property; 
    } 
} 

class B { 
    public $property = "B property"; 

    public function bMethod() { 
     A::aMethod(); 
    } 
} 

$b = new B(); 
$b->bMethod(); 

Nó đường nối biến $ này, được sử dụng trong phương thức được gọi là phương pháp tĩnh, trỏ đến trường hợp của "người gọi". Trong ví dụ trên có được $ this-> tài sản được sử dụng trong lớp Một mà điểm đến một tài sản của B.

EDIT:

The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object (usually the object to which the method belongs, but possibly another object, if the method is called statically from the context of a secondary object). PHP > The Basics

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