php의 대상을 깊이 있게 분석하다
class BaseClass{
public function test(){
ehco "test";
}
final public function moreTest(){
echo "moretest";
}
}
class ChildClass extends BaseClass{
public function moreTest(){
echo "moretest";
}
}
// Fatal error: Cannot override final method BaseClass::moretest()
2.__toString(PHP5.2 이상 권장)
class Person{
protected $name;
protected $email;
public function setName($name){
$this->name = $name;
}
public function setEmail($email){
$this->email = $email;
}
public function __toString(){
return "$this->name <$this->email>";
}
}
$rasums = new Person;
$rasums->setName('test');
$rasums->setEmail('[email protected]');
print $rasums;
3.인터페이스와 추상적인 인터페이스의 역할: 하나의 클래스가 특정한 명칭, 가시성과 원형에 따라 하나 이상의 방법을 실현하는 것을 보증하고 싶습니다.인터페이스의 요구: 클래스 중 모두 추상적 방법 추상적 방법 돈은 abstract 인터페이스 추상적 방법 속성을 추가하지 않고public 구성원 속성은 반드시 상량예:
interface ChildTest{
public function childTest();
}
class FathTest implements ChildTest1,ChildTest2{
public function childTest(){
echo 1;
}
…………
}
추상적인 작용: 사실 추상류와 인터페이스류의 일부분은 매우 비슷하다. 어디서 이런 말을 보았는지 기억한다. 추상류는 유형의 부분을 추출한다. 이 문장은 매우 웃긴다. 사실 추상류의 진리를 말한다. 추상류의 작용은 당신이 여러 가지 유형 중에서 많은 방법을 사용하고 있다는 것을 보여주면 추상류를 사용하는 것을 고려할 수 있다.너는 아마도'나는 하나의 클래스를 다시 쓸 수 있는 것이 아니라 모든 공공 클래스를 실례화하여 하나의 공공 클래스를 사용하고 같은 방법을 호출하면 된다'고 말할 수 있다. 여기는 할 수 있다. 실제로 추상적인 클래스가 하는 일은 바로 이것이다. 그러나 그는 네가 실례화된 이 절차를 생략하여 너로 하여금 직접 이 클래스를 호출하는 것처럼 편리하게 하고 너는 이 방법을 다시 불러올 수 있다.추상적인 요구: 클래스 중 적어도 하나의 추상적인 방법이 있다. 추상적인 방법은 돈이 abstract 예를 넣어야 한다
abstract class Database{
abstract public function connect();
abstract public function query();
abstract public function fetch();
abstract public function close();
}
주: 추상적인 방법은 사유적인 방법으로 정의할 수 없고 최종적인 방법으로 정의할 수 없다. 왜냐하면 그들은 계승되어야 하기 때문이다.4. 전달 대상 인용 php4: 모든'='는 하나의 복사본을 만듭니다. php5: 대상을 제외하고 다른'='는 값을 부여할 때 하나의 복사본을 만듭니다.대상은 인용 5.클론 객체 1, 컬렉션 클래스:__call 방법 소개: 클라이언트 코드가 클래스에 정의되지 않은 방법을 사용할 때 __콜이 호출됩니다. __call () 은 두 개의 매개 변수를 수락합니다. 하나는 방법 이름이고, 다른 하나는 호출할 방법에 전달될 모든 매개 변수 (수조 포함) _call () 메서드가 반환하는 모든 값은 고객에게 반환됩니다. 호출 방식이 실제로 존재하는 것과 같은 예입니다
class Address{
protected $city;
protected $country;
public function setCity($city){$this->city = $city;}
public function getCity(){return $this->city;}
public function setCountry($country){$this->country = $country;}
public function getCountry(){return $this->country;}
}
class Person{
protected $name;
protected $address;
//
public function __construct(){
$this->address = new Address;
}
public function setName($name){
$this->name = $name;
}
public function getName(){
return $this->name;
}
public function __call($method,$arguments){
if(method_exists($this->address,$method)){
return call_user_func_array(array($this->address,$method),$arguments);
}
}
//
public function __clone(){
$this->address = clone $this->address;
}
}
$test1 = new Person;
$test2 = clone $test1;
$test1->setName('testname1');
$test1->setCity('testcity1');
$test2->setName('testname2');
$test2->setCity('testcity2');
echo $test1->getName().'-'.$test1->getCity()."
";
echo $test2->getName().'-'.$test2->getCity()."
";
//testname1-testcity2
//testname2-testcity2
6.중요 속성 액세스(__set _get __isset __unset)__isset __unset5.1 이후에야 유용: 속성에 대한 수요를 차단하고 분리의 정도를 높이기 위해 __isset () 및 __unset (), 우리가 isset으로 속성을 검출하거나 unset () 로 속성을 삭제함으로써 클래스의 행동이 올바른 예시를 보장합니다
class Person{
protected $__data = array('email','test');
public function __get($property){
if(isset($this->__data[$property])){
return $this->__data[$property];
}else{
return false;
}
}
public function __set($property,$value){
if(isset($this->__data[$property])){
return $this->__data[$property] = $value;
}else{
return false;
}
}
public function __isset($property){
if(isset($this->__data[$property])){
return true;
}else{
return false;
}
}
public function __unset($property){
if(isset($this->__data[$property])){
return unset($this->__data[$property]);
}else{
return false;
}
}
}
$test = new Person;
$test->email= 'test';
var_dump($test->email);
주의: 이 두 가지 방법은 부족한 속성만 포착할 수 있습니다. 클래스에 속성을 정의하면 이 속성에 접근할 때 php는 __를 호출하지 않습니다.get () 및 __set();이 두 가지 방법은 어떤 속성 계승의 생각도 완전히 파괴했다.상위 객체에 __ 이 있는 경우get () 방법, 그리고 당신은 하위 클래스에서 자신의 __를 실현했습니다get () 메서드, 그러면 객체가 올바르게 실행되지 않습니다. 상위 클래스의 __get () 방법은 영원히 호출되지 않습니다. 물론 parent::_get () 단점 해결: 속도가 상대적으로 느리다. 마술 접근기 방법을 사용하면 반사 클래스를 사용할 수 없다. 예를 들어 phpdocumentor 같은 도구는 코드를 자동으로 문서화하여 정적 속성에 사용할 수 없다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.