PHP에는 C#과 같은 속성 개념이 없으므로 클래스의 특정 속성을 노출하는 가장 좋은 방법은 무엇입니까? 별도의 get 및 set 함수를 사용하거나 멤버 변수를 공개해야합니까? 개체가 다른 클래스에 포함될 클래스를 디자인하고 있습니다. 객체의 속성을 설정하거나 가져 오는 방법이 있어야합니다.PHP의 속성
PHP의 속성
답변
전체적으로 나는 PHP 클래스에서 공개 변수를 노출하는 것을 권장합니다. 더 복잡한 액션을 수행해야하는 경우를 제외하고 getter 및 setter 함수를 사용해야합니다.
그래서 당신은 C#
public string MyProp { get; set; }
을이에 사용하는 것이 어디 두 트릭을 할 것입니다 게터/세터와 공공 속성 또는 개인을 사용하여 PHP
public $MyProp;
이를 추천 할 것입니다.
I는 다음과 같이 진행됩니다 : 속성 중요한,이 같은 getter 및 setter 사용하는 경우
가가 : 속성이덜 중요한 경우
class myClass
{
private $myAttr;
public function getmyAttr()
{
return $this->myAttr;
}
public function setmyAttr($attr)
{
//Do some verification on $attr
$this->myAttr = $attr;
}
}
를 간단히 설정할 수 있습니다 대중에게 공개됩니다.
PHP에서는 강력한 유형이 없기 때문에 getter 및 setter에서 개인 속성을 항상 선호합니다. 속성을 항상 있어야한다고합니다 (예 : 1
대신 "1"
이 아님).
매우 보안에 민감하지 않은 특성을 공용으로 만드는 것은 매우 드물지 않습니다. 다른 클래스에서
class withAttributes{
private $property;
public function getPrivateProperty{
return $this->property;
}
}
: 당신이 개인을 유지하려는 경우 그러나 당신이 뭔가를 만들 수
$object = new withAttributes();
$attribute = $object->getPrivateProperty();
희망이
을하는 데 도움이 언어에 내장 된 더 관용적 방법이 없습니다 , 그러나 당신은 마법의 __get
과 __set
방법을 사용하여 simillar를 에뮬레이션 할 수 있습니다. 이 꽤 바보 같은 예를 생각해 보면 약간의 읽기/쓰기 로직을 구현하기로 결정한 경우, 나중에
Class Foo {
private $bar;
private $baz;
public function __get($name) {
if (property_exists($this, $name)) {
if ($name == 'bar') {
return strtoupper($this->{$name});
} else {
return $this->{$name};
}
}
return null; // this is what php would do, consider throwning an exception instead
}
public function __set($name, $value) {
if (property_exists($this, $name)) {
if ($name == 'bar') {
$this->{$name} = strtolower($value);
} else {
$this->{$name} = $value;
}
}
// we just ignore this call, consider throwing exceptions, or you could make the class open to property addition in runtime too
}
}
$f = new Foo;
$f->bar = 'tickle me elmo';
print $f->bar; // prints uppercase
이 방법을, 당신은 마법의 방법에 그것을 연결할 수 있습니다. 성능 측면에서 볼 때, 이러한 매직 메소드는 일반적인 메소드 호출보다 속도가 빠르며 명시 적 getter/setter 메소드보다 이러한 클래스의 사용자에게 더 놀라운 것은 틀림 없습니다.
당신이 []
구문은 ArrayAccess
인터페이스를 구현 고려 StdObject
내장 또는 기본 array
같은 더 뭔가를 만들려면.
- 1. PHP의 개인 속성 무시
- 2. PHP의 속성 대 속성 배열 OOP
- 3. PHP의 xpath로 속성 값 선택하기
- 4. PHP의 비누 응답 헤더에서 속성 가져 오기
- 5. PHP의 간단한 XML 요소에서 추출 속성
- 6. 클래스의 인스턴스를 반환합니다 ("Class php의 속성"이었습니다)
- 7. PHP의
- 8. PHP의
- 9. PHP의 <a> 태그의 속성 값을 구문 분석하는 방법
- 10. PHP의 체크 박스
- 11. PHP의 친구 수업 시뮬레이트
- 12. PHP의 OOP 성능이 높습니다.
- 13. PHP의 데이터 형식 SOAP
- 14. PHP의 DOMDocument
- 15. PHP의 밑줄?
- 16. PHP의 MYSQL,
- 17. PHP의 EREG와
- 18. PHP의 조건
- 19. PHP의 EventListener
- 20. PHP의 array_count_values는
- 21. PHP의 메일은
- 22. PHP의 트랙백
- 23. PHP의 ffmeg이
- 24. PHP의 동시성
- 25. PHP의 register_printf_function
- 26. PHP의 공백을 %
- 27. PHP의 DOM은
- 28. PHP의 배열
- 29. PHP의 $ 포스트와는
- 30. PHP의 API
요점이 없습니다. C#의 속성을 사용하면 나중에 논리를 추가 할 수 있습니다. PHP에서 일반 속성을 사용하는 경우 getter/setter로 변경하면 해당 속성을 사용할 때마다 리 팩토링됩니다. – Jon
중요한 고려 사항입니다. 추가 해줘서 고마워. – Fenton