Home Backend Development PHP Tutorial Implementation code for lazy loading through virtual proxy in php_PHP tutorial

Implementation code for lazy loading through virtual proxy in php_PHP tutorial

Jul 21, 2016 pm 03:28 PM
php acting code load Great God accomplish Delay of virtual pass

This thing was learned from Martin's "Enterprise Application Architecture Patterns". It assists the characteristics of PHP's dynamic language and can implement lazy loading (LazyLoad) much easier than Java. The basic principle is to use a virtual proxy (Virtual Proxy) as a placeholder. Once a member (method or attribute) of the proxy object is accessed, the loading is triggered.

However, the version I implemented has limitations:

is only applicable to objects and cannot proxy basic data types such as arrays (needs to be encapsulated with built-in objects such as ArrayObject)
is proxied After that, some interface implementations with operator overloading properties became invalid, such as the indexer of ArrayAccess and the iterator of Itreator. If you use this proxy to handle delayed loading of collection types, you need to inherit a subclass for special processing so that Externally use foreach to iterate
demo

Copy code The code is as follows:

// Test
$v = new VirtualProxy(function(){
echo 'Now, Loading', "n";
$a = new ArrayObject(range(1,100));
$a->abc = 'a';
// In actual use, the findXXX method of DataMapper is called here
// What is returned is the domain object collection
return $a;
});
// The proxy object is directly used as The original object is accessed
// At this time, the callback function passed in by the constructor is called
// To achieve the delay of loading the object operation
echo $v->abc . $v->offsetGet (50);

Virtual Proxy
Copy code The code is as follows:

/**
* Virtual proxy, the closure function is called to generate the target object only when the member is accessed.
*
* @author tonyseek
*
*/
class VirtualProxy
{
private $holder = null;
private $loader = null;

/**
* Virtual proxy, the closure function is called to generate the target object only when the member is accessed.
*
* @param Closure $loader generates the closure function of the proxy object
*/
public function __construct(Closure $loader)
{
$this->loader = $loader;
}

/**
* Call of proxy member method
*
* @param string $method
* @param array $arguments
* @throws BadMethodCallException
* @return mixed
*/
public function __call($ method, array $arguments = null)
{
$this->check();

if (!method_exists($this->holder, $method)) {
throw new BadMethodCallException();
}

return call_user_func_array(
array(&$this->holder, $method),
$arguments);
}

/**
* Reading of proxy member properties
*
* @param string $property
* @throws ErrorException
* @return mixed
*/
public function __get($property)
{
$this->check();

if (!isset($this ->holder->$property)) {
throw new ErrorException();
}

return $this->holder->$property;
}

/**
* Assignment of proxy member properties
*
* @param string $property
* @param mixed $value
*/
public function __set($property, $value)
{
$this->check();

$this- >holder->$property = $value;
}

/**
* Check whether the proxy object already exists, and generate it if it does not exist.
*/
private function check()
{
if (null == $this->holder) {
$loader = $this->loader;
$this->holder = $loader();
}
}
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/323536.htmlTechArticleThis thing was learned from Martin’s "Enterprise Application Architecture Pattern" to assist the characteristics of PHP dynamic language. Lazy Load can be implemented much easier than Java. Basically the original...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Top 10 Currency Trading Platform Virtual Currency Apps Top 10 Reliable and Useful Currency Trading Apps Top 10 Currency Trading Platform Virtual Currency Apps Top 10 Reliable and Useful Currency Trading Apps Feb 17, 2025 pm 03:57 PM

With the thriving virtual currency market, choosing a reliable trading platform is crucial. This article recommends 10 highly respected virtual currency trading platforms, including Binance, Coinbase, FTX, Huobi, OKX, Gemini, Kraken, Bitstamp, Bittrex and KuCoin. Factors such as security, liquidity, expenses, asset selection and user experience are crucial when choosing a trading platform. This article will provide you with authoritative reference and help you find the trading platform that best suits your needs.

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Ranking of the top ten currency trading platforms in the currency circle (the top ten virtual currency trading apps recommended in 2025) Ranking of the top ten currency trading platforms in the currency circle (the top ten virtual currency trading apps recommended in 2025) Feb 20, 2025 pm 05:57 PM

Recommended best virtual currency trading platforms: Binance: The largest transaction volume, the most money is supported, and the ecosystem is perfect; OKX: Advanced trading engine, rich trading tools, and powerful derivative trading platform; Gate.io: The largest number of cryptocurrencies, convenient user interface, and innovative functions; Bitget: Focus on derivative trading, leading social trading functions and strong liquidity; Coinbase: The largest, most compliant and suitable for beginners in the United States.

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

See all articles