ThinkPhp5의 간단한 인스턴스 구현 예
이 글에서는 주로 thinkphp5 인스턴스의 간단한 구현을 소개하는데, 관심 있는 친구들은 참고하면 된다.
저는 최근에 ThinkPHP5를 공부하다가 TestClass::instance() 메소드를 처음 보았습니다. . 저는 매우 궁금했습니다. ThinkPHP의 소스 코드를 살펴보고 그 디자인 아이디어가 전반적으로 이해되었습니다.
기존 규칙, 코드로 직접 이동:
<?php class TestClass { public static function instance() { return new self(); } public $data = []; public function __set($name, $val) { return $this->data[$name] = $val; } public function __get($name) { return $this->data[$name]; } } $app1 = TestClass::instance(); $app1->key = 'Application 1'; echo $app1->key . '<br />'; ?>
통화를 용이하게 하기 위해 ThinkPHP도 모방하고 도우미 함수를 작성했습니다.
<?php function app() { return TestClass::instance(); } $app2 = app(); $app2->key = 'Application 2'; echo $app2->key . '<br />'; ?>
이렇게 하면 인스턴스가 간단하게 구현됩니다.
그러나 이 방법에는 작은 문제가 있습니다. 100번 호출하면 100개의 인스턴스를 생성해야 한다는 것을 생각하면 무섭습니다.
Test 클래스에 정적 속성을 추가하고 생성된 인스턴스를 여기에 저장하세요. 다음에 호출해야 하는 경우 이 인스턴스를 직접 호출하세요.
<?php class TestClass { public static $instance; //用于缓存实例 public $data = []; public static function instance() { //如果不存在实例,则返回实例 if (empty(self::$instance)) { self::$instance = new self(); } return self::$instance; } public function __set($name, $val) { return $this->data[$name] = $val; } public function __get($name) { return $this->data[$name]; } } function app($option = []) { return TestClass::instance($option); } header('content-type:text/plain'); $result = []; $app1 = app(); $app1->key = "Application 1"; //修改 key 为 Application 1 $result['app1'] = [ 'app1' => $app1->key, //实例中 key 为 Application 1 ]; // 创建 app2,因为 instance 已经存在实例,直接返回 缓存的实例 $app2 = app(); $result['app2'] = [ 'setp1' => [ 'app1' => $app1->key, // Application 1 'app2' => $app2->key, //因为直接调用的实例的缓存,所以 key 也是 Application 1 ], ]; // 无论 app1,app2 都对在内存中 对应的同一个实例,无论通过谁修改,都能改变值 $app1->key = "Application 2"; $result['app2']['setp2'] = [ 'app1' => $app1->key, // Application 2 'app2' => $app2->key, // Application 2 ]; print_r($result); ?>
위의 실험을 통해 몇 번을 호출해도 동일한 인스턴스가 사용되는 것을 알 수 있습니다. 이는 낮은 효율성 문제를 해결합니다.
지금까지는 기본적으로 대부분의 상황을 충족합니다. 유일한 작은 결함은 인스턴스의 초기 매개변수가 다를 수 있으므로 유연하게 호출할 수 없다는 것입니다(일반적으로 동일한 프로그램이 두 개의 데이터베이스를 호출함). 이 문제는 위의 예제를 약간 수정하여 들어오는 매개변수를 키로 사용하고 불합리한 인스턴스를 배열에 캐시함으로써 해결할 수 있습니다.
아아아아위 내용은 ThinkPhp5의 간단한 인스턴스 구현 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 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)

뜨거운 주제











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

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

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

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.
