이 기사의 예에서는 PHP 객체 체인 작업의 구현 원리를 설명합니다. 참고할 수 있도록 자세한 내용은 다음과 같습니다.
체인 작업이 무엇인가요? jQuery를 사용하는 학생들은 jQuery에서 DOM 요소를 다음과 같이 조작하는 경우가 많습니다. >
$("p").css("color").addClass("selected");
연속동작이 정말 멋있고, 코드리딩에도 아주 편리하네요. 그럼 PHP로 구현할 수 있을까요? 대답은 '예'입니다. 물론 OOP에서는 사용해야 합니다. 절차적 프로그램에서는 이 방법을 사용할 필요가 없습니다.
PHP에서는 많은 함수를 사용하는 경우가 많습니다.
$str = 'abs123 '; echo strlen(trim($str));
위 코드의 기능은 양쪽 공백을 제거하는 것입니다. 그런 다음 문자열의 길이를 출력하면 다음과 같은 체인 프로그래밍을 사용할 수 있습니다.
PHP 객체 지향$str = 'abs123 '; echo $str->trim()->strlen();
class BaseChainObject{ /** * 追溯数据,用来进行调试 * @var array */ private $_trace_data = array(); /** * 保存可用方法列表 * @param array */ protected $_methods = array(); /** * 处理的数据 * @param null */ public $data; function __construct($data){ $this->data = $data; $this->_trace_data['__construct'] = $data; return $this->data; } function __toString(){ return (String)$this->data; } function __call($name,$args){ try{ $this->vaild_func($name); }catch(Exception $e){ echo $e->getMessage(); exit(); } if (!$args) { $args = $this->data; $this->data = call_user_func($name,$args); }else{ $this->data = call_user_func_array($name,$args); } $this->_trace_data[$name] = $this->data; return $this; } /** * 判断方法是否存在 * @param string */ private function vaild_func($fn){ if(!in_array($fn, $this->_methods)){ throw new Exception("unvaild method"); } } public function trace(){ var_dump($this->_trace_data); } } class String extends BaseChainObject{ protected $_methods = array('trim','strlen'); } $str = new String('ab rewqc '); echo $str->trim()->strlen(); $str->trace();
이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.
PHP 객체체인 연산 구현 원리 분석과 관련된 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!