* 생성 방법 및 접근 제어(querier 및 setter)
* 생성 방법:
* 1. 고정 메서드 이름: __constructor()
* 2. 기능: 객체 생성 시 자동으로 완료되어야 하는 작업을 선언하고, 객체 속성 초기화 또는 클래스의 메소드 자동 호출과 같은
* 3. 표준화된 클래스는 생성자 메소드를 하나만 가져야 하며 하나만 가질 수 있습니다
* 보충: 이중 밑줄로 시작하는 메소드를 매직 메소드라고 합니다. 일반적인 방법 비교:
* 1. 다양한 호출자: 개체에 의해 직접 호출되고 사용자에게는 권한이 없습니다.
* 2. 다양한 호출 시나리오: 특정 시나리오에서만 호출될 수 있으며 자동으로 호출됩니다.
* 일반적인 트리거 매직 메서드 호출 시나리오는 다음과 같습니다.
* 1. 개체 초기화, 2. 개체 속성 쿼리 및 설정, 4. 개체 직렬화, 5. 개체 소멸,
* class 생성자가 에서 선언되면 속성은 선언될 때 초기화될 필요가 없습니다
* 초기화가 더 이상 필요하지 않은데 왜 $name에 빈 문자열을 제공해야 하는지 궁금할 것입니다. $age는 0이고 $stature는 비어 있습니다. 배열?
* 이유는: PHP는 약한 유형의 언어입니다. 현재 배열과 객체는 이미 유형 힌트를 지원하지만 문자열과 같은 스칼라 및 숫자 유형은 여전히 지원되지 않습니다. * 따라서 속성에 해당 유형을 나타내는 초기 값을 지정하면 유형 힌트 역할을 할 수 있으므로 좋은 습관입니다
*
* 클래스에서 생성 방법을 통해 클래스 속성을 초기화할 때, 클래스 외부에서 직접 값을 할당할 필요가 없습니다. 속성이 초기화됩니다.
* 따라서 보안 및 필요성을 위해 클래스의 속성을 외부에서 직접 가져올 필요가 없습니다. 데이터 캡슐화를 위해 클래스 속성은 외부에서 직접 접근할 수 없도록 해야 합니다.
* 클래스 속성을 수정하려면 private 키워드를 사용하세요.
* private: 이 클래스의 메서드 내에서만 접근할 수 있으며, 접근할 수 없습니다. 외부 또는 하위 클래스에서 접근 가능
* 클래스의 속성이 비공개인 경우, 접근 인터페이스를 외부에 제공해야 합니다
* 이 인터페이스는 클래스 메소드를 통해 구현됩니다. 접근 제어는 공개입니다. 클래스는 외부에서 액세스할 수 있습니다
* 요청이 적법하고 데이터가 안전하고 의미가 있는지 확인하기 위해 인터페이스 메서드에서 외부 액세스에 대해 필요한 감지를 수행할 수 있습니다
* 외부 쿼리(읽기) 작업의 경우 쿼리 메서드를 해결하도록 설정하세요. 문제
* 권장되는 쿼리 메소드 이름은 get + 속성 이름이며, 속성 이름의 첫 번째 문자는 대문자로 표시되며 카멜 케이스 명명 방법이 사용됩니다.
* 쿼리자는 일반적으로 If 매개변수를 전달할 필요가 없습니다. 전달되는 경우 일반적으로 ***
class GirlFriend2 { //类属性:$name 姓名 public $name = ''; private $name = ''; //类属性: 年龄 public $age = 0; private $age = 0; //类属性: 身材三维stature['stætʃə]: 胸,腰,臀 public $stature = []; private $stature = []; //声明构造方法 public function __construct($name,$age, array $stature) { //初始化类成员属性 $this->name = $name; $this->age = $age; $this->stature = $stature; } //查询器: getName() 获取女友姓名 public function getName() { //返回当前对象的name属性值 return $this->name; } // 通过查询器限制非法用户对类属性的访问 public function getName($yourName='') { if (!empty($yourName) && $yourName != '西门大官人' ) { return $this->name; } return '非法访问'; } //一个方法中,尽可能只用一个return,否则会警告return语句过多,建议做如下修改 //添加一个临时变量,这样可确保方法内只会一个return语句 public function getName($yourName='') { //创建方法内部变量(局部变量),用来保存要返回的信息 $msg = '非法访问'; if (!empty($yourName) && $yourName != '西门大官人' ) { $msg = $this->name; } return $msg; } //下面对年龄和三维的访问,你也可以通过对姓名的限制方式进行访问控制 //查询器: getAge() 获取女友年龄 public function getAge() { //返回当前对象的age属性值 // return $this->age; //下面是改写一下当前方法,加入一些逻辑判断,仅做演示,实际功能自己扩展 $msg = $this->age; if ($msg >= 50) { $msg .= ', 口味够重呀,大兄弟~~'; } elseif ($msg < 18) { $msg .= ', 未成年呢,求放过~~'; } return $msg; } //查询器: getStature() 获取女友身材信息 public function getStature() { //返回当前对象的$stature属性值 return $this->stature; } /** * 设置器:也叫修改器,允许外部修改类的属性值 * 参数一般有二个: 属性名与新的属性值 * 因为属性名在方法中已经指定,这里只需要传入一个新的属性值即可 */ //下面通过设置器来控制对类属性的修改操作 public function setName($value='') { return $this->name = $value; } //设置器更多的应用场景是会属性值进行过滤检测,例如年龄的范围 public function setAge($value) { //年龄必须在18~120之间 if (in_array($value,range(14,120))){ $this->age = $value; } } }
입니다.