PHP语言动态特性
PHP语言动态特性的更多用例 下面的例子类似面向切面编程,其和面向对象不同的地方在于,面向对象关注于每个对象定义的完整性, 而切面是关注于整个对象系统的某个/某些特定功能面,比如日志、过滤等,把这些特定功能面剥离出来达到共用的目的。 Listing 8.
PHP语言动态特性的更多用例
下面的例子类似面向切面编程,其和面向对象不同的地方在于,面向对象关注于每个对象定义的完整性,
而切面是关注于整个对象系统的某个/某些特定功能面,比如日志、过滤等,把这些特定功能面剥离出来达到共用的目的。
Listing 8. 简单的User类
<?php class User { private $name; function set_name( $value ) { $this->name = $value; } function get_name() { return $this->name; } } $c1 = new User(); $c1->set_name( "Jack" ); $name = $c1->get_name(); echo( "name = $name\n" ); ?>
这个对象足够简单,现在如果想在用户名字设置或读取的时候记录日志,该怎么做?
你可以创建一个动态的日志处理对象,把这个用户对象包装在其中,这样看起来用户对象的动作都会通知到其包装日志类一样。
Listing 9. 动态包装类
<?php class Logged { private $obj; function __call( $method, $args ) { echo( "$method( ".join( ",", $args )." )\n" ); return call_user_func_array(array(&$this->obj,$method), $args ); } function __construct( $obj ) { $this->obj = $obj; } } $c1 = new Logged( new User() ); $c1->set_name( "Jack" ); $name = $c1->get_name(); echo( "name = $name\n" ); ?>
调用代码还是一样,但这一次,任何对User方法的访问,都会被echo出来。(你可以把echo替换其他的逻辑,如安全控制、日志记录、数据过滤等)
就好比在User对象的方法被调用时被某个钩子函数给挂载了,进行了预处理或后置处理。
by iefreer

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu
