Câu hỏi liên quan

Mà là tốt hơn ở PHP, tĩnh biến hoặc riêng biến?


–1 Phiếu
Đã hỏi 31/3/2016 bởi Spall (310 điểm)
Tôi nhận thấy hai cách trong PHP để làm điều tương tự. Bạn có thể cho tôi biết đó là một thực hành programming tốt hơn? Trong ví dụ đầu tiên, tôi sử dụng một variable private trên lớp. Ngày thứ hai ví dụ, tôi sử dụng static variable trong một phương pháp class .
class Test {
  private $_myvar;
  public function getVar(){
    if (!isset($this->_myvar)) {
      $this->_myvar = "test\\n";
    }
    return $this->_myvar;
  }
}
$oTest = new Test();
echo $oTest->getVar(); // sets var first time and returns it
echo $oTest->getvar(); // pulls from cache
hoặc:
class Test {
  public function getVar(){
    static $myvar;
    if (!isset($myvar)) {
      $myvar = "test\\n";
    }
    return $myvar;
  }
}
$oTest = new Test();
echo $oTest->getVar(); // sets var first time and returns it
echo $oTest->getvar(); // pulls from cache

2 Câu trả lời

0 Phiếu
Đã trả lời 04/4/2016 bởi nothowever (270 điểm)
Với các tài sản class (có thể là công cộng, private hoặc bảo vệ), variable có thể truy cập đến các phần khác của lớp. Với biến static , đó là chỉ có thể nhìn thấy rằng method của lớp. Tôi sẽ đề nghị sử dụng tài sản class (nhưng có lẽ không riêng, mà tôi thường không tìm thấy nhiều sử dụng cho; bảo vệ thông thường là một ý tưởng tốt hơn) vì nó là dễ dàng hơn để thử nghiệm sau đó; bạn không thể làm bất cứ điều gì để bỏ, thay đổi hoặc kiểm tra biến static . Tôi thấy một số nhầm lẫn có thể có trong các các câu trả lời ở đây giữa static biến static class thuộc tính . PHP sử dụng công cụ sửa đổi cùng, nhưng hành vi là khá khác nhau; một ví dụ sau.
<?php
class Foo {
   // Static class property
   public static $bar = 'bar';
   public function blarg() {
      static $bar;
      if (empty($bar)) {
         $bar = 'blarg';
      }
      return $bar;
   }
}
trong ví dụ trên tài sản class static có thể được truy cập bằng cách sử dụng Foo::$bar (hoặc self::$bar trong class và static::$bar trong PHP 5,3); static variable không và chỉ có thể nhìn thấy bên trong function blarg().
Đã bình luận 06/4/2016 bởi bgu_2218 (1,110 điểm)
trong ví dụ đầu tiên của bạn, nó không nên nó nói $this-> _myvar _myvar $ không?
0 Phiếu
Đã trả lời 08/4/2016 bởi Or_2197 (580 điểm)
Đó là giống như nói rằng phòng là tốt hơn các nhà bếp hoặc phòng tắm, họ là cả hai phòng, nhưng họ có chức năng khác nhau. static variable là giống nhau trong nhiều đối tượng. Một biến instance , tuyên bố thông qua private ở trên là cụ thể cho một đối tượng nhất định. Ghi chú rằng private là một công cụ sửa đổi access , static không phải là một variable có thể là cả hai. Trong vị trí bạn có thay đổi static của bạn, trong vòng các chức năng, nó không phải là một đối tượng, lớp variable ở tất cả, nhưng một biến truyền thống hàm cấp static sẽ là instanced đơn trên tất cả các cuộc gọi đến các chức năng, làm cho nó tương tự như một biến lớp cấp static, nhưng chỉ có thể truy cập trong vòng method nó được định nghĩa trong vòng.
Đã bình luận 08/4/2016 bởi TbgGot (290 điểm)
Phần "tư nhân" làm cho không có sự khác biệt; cùng một hành vi có với public và bảo vệ class thuộc tính là tốt.
Đã bình luận 10/4/2016 bởi theslightly (180 điểm)
Yobo, ngay, nhưng có một accessor cho public variable sẽ là ngớ ngẩn. :)
Đã bình luận 10/4/2016 bởi Ovg5538 (477,960 điểm)
-xấu của tôi--typo. Cảm ơn! Tôi sẽ sửa.

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...