2009-07-29 5 views
7

Tôi tự hỏi liệu PHP có một loại biến trong các lớp có chức năng như tĩnh trong các ngôn ngữ khác hay không. Và do đó, tôi có nghĩa là tất cả các đối tượng của cùng một lớp sử dụng cùng một biến và khi nó được cập nhật trên một lớp, nó được cập nhật trên mỗi một lớp. Tĩnh là gần vì nó được chia sẻ trong tất cả các đối tượng nhưng tôi cần để có thể cập nhật nó. Tôi sẽ phải sử dụng globals cho điều này?PHP tương đương với một biến tĩnh trong các ngôn ngữ khác là gì?

+0

Vì khi nào bạn không thể cập nhật các thuộc tính tĩnh? – jason

+0

Biến tĩnh có thể được sửa đổi ... –

+2

Biến Const không thể sửa đổi; biến tĩnh có thể được. – Extrakun

Trả lời

3

Tôi nghĩ tĩnh là những gì bạn muốn. Bạn có thể cập nhật một biến tĩnh, bạn chỉ cần có để làm điều đó trong một "bối cảnh tĩnh" (tức là sử dụng các toán tử ::

class Class1 { 
    protected static $_count = 0; 

    public function incrementCount() { 
     return self::$_count++; 
    } 
} 

$instance1 = new Class1(); 
$instance2 = new Class1(); 
var_dump($instance1->incrementCount(), $instance2->incrementCount()); 

chí đầu ra:..

int 0

int 1

+0

Đây là vấn đề. Tôi đã sử dụng $ this thay vì ::. – fent

0

Bạn có thể chỉ cần tạo biến trong tệp PHP có tên là Hằng số.

--Constants.php-- $ database_name = "mysql"

và bao gồm các tập tin trong tập tin của bạn. Bạn có thể thay đổi giá trị của nó. Nó đến gần với những gì bạn muốn, nhưng nó không phải là tốt gọi chúng hằng số vì hằng số không có nghĩa là để được thay đổi, đó là những gì nhầm lẫn tôi :).

0

Tôi không thấy lý do khiến biến tĩnh không hoạt động đối với những gì bạn mô tả (nhưng không có gì liên quan đến từ khóa cuối cùng)?

<?php 

class Bla 
{ 
    public static $var; 

    public function __construct() 
    { 
     Bla::$var = Bla::$var + 1; 
    } 
} 

$test = new Bla(); 
echo Bla::$var; // 1 
$test = new Bla(); 
echo Bla::$var; // 2 

?> 
1

Bạn cập nhật các thuộc tính tĩnh có thể:

class A { 
    protected static $_foo = 0; 

    public function increment() 
    { 
     self::$_foo++; 
    } 

    public function getFoo() 
    { 
     return self::$_foo; 
    } 
} 


$instanceOne = new A(); 
$instanceTwo = new A(); 


$instanceOne->getFoo(); // returns 0 

$instanceTwo->increment(); 

$instanceOne->getFoo(); // returns 1 
0

tôi nghĩ static từ khóa mà bạn đang tìm kiếm.

Và không có gì có thể ngăn chặn một 01 làtài sản từ beeing "cập nhật", trong PHP: nó được khởi tạo lần đầu tiên nó được thiết lập, nó giữ nó giá trị trong khi thực thi kịch bản PHP, nhưng bạn chắc chắn có thể đặt nó thành một giá trị mới.

6

Câu trả lời đúng là không có tương đương trong PHP đến cuối cùng, nhưng tĩnh có vẻ như những gì bạn muốn ở địa điểm đầu tiên.

static có thuộc tính sẽ có cùng giá trị trên tất cả các phiên bản của một lớp vì nó không được gắn với một trường hợp cụ thể.

Bạn cần sử dụng toán tử :: để truy cập, vì tĩnh, bạn không thể sử dụng ->.