Làm cách nào để tạo getters và setters trong PHP?

“Getters” và “Setters” là các hàm lớp cho phép bạn kiểm soát quyền truy cập vào các thuộc tính của đối tượng

Đôi khi, mọi người sẽ gọi chúng là “phương pháp đột biến”

Tóm lại

  • Một "getter" cho phép bạn truy xuất hoặc nhận một thuộc tính nhất định
  • Một "setter" cho phép bạn đặt giá trị của một thuộc tính nhất định

Hãy xem lớp PHP sau

name = $name;
    }
    
    //Set the person's date of birth.
    public function setDateOfBirth($dateOfBirth){
        $this->dateOfBirth = $dateOfBirth;
    }
    
    //Get the person's name.
    public function getName(){
        return $this->name;
    }
    
    //Get the person's date of birth.
    public function getDateOfBirth(){
        return $this->dateOfBirth;
    }
    
}

Trong lớp Person của chúng tôi, chúng tôi có hai thuộc tính riêng được gọi là $name và $dateOfBirth

Vì chúng là tài sản riêng tư nên bạn sẽ không thể truy cập chúng như vậy

$person = new Person();
echo $person->name;

Nếu bạn cố chạy đoạn mã trên, bạn sẽ nhận được lỗi nghiêm trọng sau

Lỗi nghiêm trọng. Không thể truy cập tài sản cá nhân Người. tên $

Để cung cấp quyền truy cập vào các thuộc tính riêng tư của chúng tôi, chúng tôi đã tạo hai "getters" được gọi là getName và getDateOfBirth

Nếu bạn xem lớp Person ở trên, bạn sẽ thấy rằng các hàm này chỉ đơn giản trả về giá trị của hai thuộc tính riêng tư của chúng ta. Đó là tất cả những gì họ làm

Vì chế độ hiển thị của hai thuộc tính này được đặt ở chế độ riêng tư nên bạn cũng sẽ không thể sửa đổi hoặc "đặt" giá trị của chúng

Thay vào đó, bạn sẽ phải sử dụng một trong các hàm “setter” mà chúng tôi đã tạo. setName hoặc setDateOfBirth

Một ví dụ về các hàm getter và setter của chúng tôi đang sử dụng

//Instantiate the Person object.
$person = new Person();

//Set the name to "Wayne"
$person->setName('Wayne');

//Get the person's name.
$name = $person->getName();

//Print it out
echo $name;

Trong mã PHP ở trên

  1. Chúng tôi đã tạo đối tượng Person của mình
  2. Sau đó, chúng tôi “đặt” thuộc tính $name thành “Wayne” bằng cách sử dụng phương thức setter của chúng tôi setName
  3. Cuối cùng, chúng ta đã lấy giá trị của thuộc tính $name bằng cách sử dụng hàm getName getName

Như bạn có thể thấy, đây là thứ khá đơn giản

Tại sao sử dụng getters và setters?

Các getters và setters mà chúng ta đã tạo trong lớp Person của chúng ta là vô nghĩa

Họ chỉ cung cấp quyền truy cập vào tài sản riêng của chúng tôi. Ngoài ra, họ không thực sự làm bất cứ điều gì

Tuy nhiên, nếu chúng ta muốn thêm một lớp xác thực để ngăn các nhà phát triển lạm dụng đối tượng của mình thì sao?

Chà, chúng ta chỉ cần thêm lớp xác thực đó vào phương thức setter của mình

//Set the person's name.
public function setName($name){
   if(!is_string($name)){
       throw new Exception('$name must be a string!');
   }
   $this->name = $name;
}

Trong đoạn mã PHP ở trên, chúng tôi đã sửa đổi phương thức setter setName để nó xác thực biến $name

Bây giờ, nếu một lập trình viên cố gắng đặt biến $name thành một mảng hoặc boolean, thì hàm của chúng ta sẽ đưa ra một Ngoại lệ

Theo mặc định, tiện ích mở rộng này sẽ sử dụng chức năng tùy chỉnh để tạo getters & setters của bạn nhưng bạn hoàn toàn có thể tùy chỉnh đánh dấu được sử dụng để tạo chúng. Theo mặc định, các mẫu được lưu trữ trong

  • Linux. ________số 8_______
  • OSX.
    module.exports = (property) => `
    	/**
    	 * ${property.setterDescription()}
    	 *
    	 * @param   ${property.getType() ? property.getType() : 'mixed'}  \$${property.getName()}  ${property.getDescription() ? property.getDescription() : ''}
    	 *
    	 * @return  self
    	 */
    	public function ${property.setterName()}(${property.getTypeHint() ? property.getTypeHint() + ' ' : '' }\$${property.getName()})
    	{
    		$this->${property.getName()} = \$${property.getName()};
    
    		return $this;
    	}
    `
    
    0
  • các cửa sổ.
    module.exports = (property) => `
    	/**
    	 * ${property.setterDescription()}
    	 *
    	 * @param   ${property.getType() ? property.getType() : 'mixed'}  \$${property.getName()}  ${property.getDescription() ? property.getDescription() : ''}
    	 *
    	 * @return  self
    	 */
    	public function ${property.setterName()}(${property.getTypeHint() ? property.getTypeHint() + ' ' : '' }\$${property.getName()})
    	{
    		$this->${property.getName()} = \$${property.getName()};
    
    		return $this;
    	}
    `
    
    1

Bạn cũng có thể đặt mẫu tùy chỉnh để nhập thư mục tùy chỉnh trong cài đặt _______________

Văn bản mẫu được sử dụng để tạo khuôn mẫu vì tính linh hoạt mà chúng cung cấp. Với chúng, bạn có thể dễ dàng tạo một mẫu tùy chỉnh mà không cần kiến ​​thức và cũng có thể đầu tư thời gian cho những thứ phức tạp. Để sử dụng nâng cao, bạn sẽ phải google về chữ mẫu nhưng đây là 2 mẫu mẫu

người lấy mẫu. mẫu js

module.exports = (property) => `
	/**
	 * ${property.getterDescription()}
	 *
	 * @return  ${property.getType() ? property.getType() : 'mixed'}
	 */
	public function ${property.getterName()}()
	{
		return $this->${property.getName()};
	}
`

người đặt mẫu. mẫu js

module.exports = (property) => `
	/**
	 * ${property.setterDescription()}
	 *
	 * @param   ${property.getType() ? property.getType() : 'mixed'}  \$${property.getName()}  ${property.getDescription() ? property.getDescription() : ''}
	 *
	 * @return  self
	 */
	public function ${property.setterName()}(${property.getTypeHint() ? property.getTypeHint() + ' ' : '' }\$${property.getName()})
	{
		$this->${property.getName()} = \$${property.getName()};

		return $this;
	}
`

Như bạn có thể thấy một đối tượng Thuộc tính được chuyển đến các mẫu để bạn có thể truy cập bất kỳ phương thức công khai nào ở đó. Tôi cũng thích ý tưởng thêm nhiều nội dung hơn khi người dùng tìm thấy giới hạn. Mở một vấn đề nếu bạn tìm thấy điều gì đó mà bạn không thể đạt được

Làm thế nào để gọi một getter trong PHP?

Bây giờ bạn có thể tự động gọi getters của mình, như vậy. foreach ($getters as $getter) { echo $entity->{$getter}(); . ` } Một điều cần lưu ý. afaik, get_class_methods() cũng sẽ trả về tên của các phương thức tĩnh. Có lẽ không phải là một vấn đề trong trường hợp của bạn vì bạn không có khả năng có các getters và setters tĩnh.

getters và setters là gì và tại sao chúng lại quan trọng?

Getters và setters được sử dụng để bảo vệ dữ liệu của bạn, đặc biệt khi tạo lớp . Đối với mỗi biến thể hiện, phương thức getter trả về giá trị của nó trong khi phương thức setter đặt hoặc cập nhật giá trị của nó. Vì điều này, getters và setters còn được gọi là bộ truy cập và bộ biến đổi, tương ứng.