PHP uses virtual proxy to implement lazy loading technology, PHP load
The article is from the "Enterprise Application Architecture Model" of Martin great God, the features of the auxiliary PHP Dynamic language can be deferred-loaded with a much easier implementation than Java-through a virtual proxy placeholder. The only flaw is that you can only proxy objects and cannot proxy built-in basic types.
I try the water of the PHP domain model design, but also with this to achieve domainobject delay loading.
Copy the Code code as follows:
* Virtual proxy, which calls the closure function to generate the target object only when the member is accessed.
*
* @author Tonyseek
*
*/
Class Virtualproxy
{
Private $holder = null;
Private $loader = null;
/**
* Virtual proxy, which calls the closure function to generate the target object only when the member is accessed.
*
* @param Closure $loader generate the closure function of the Proxied object
*/
Public function __construct (Closure $loader)
{
$this->loader = $loader;
}
/**
* Invocation of Proxy member methods
*
* @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);
}
/**
* Read of Agent 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 if the proxy object already exists, and the build does not exist.
*/
Private Function Check ()
{
if (null = = $this->holder) {
$loader = $this->loader;
$this->holder = $loader ();
}
}
}
Test
$v = new Virtualproxy (function () {
Echo ' Now, Loading ', ' \ n ';
$a = new Arrayobject (range (1,100));
$a->abc = ' a ';
In practice, this is called the Findxxx method of Datamapper.
Returns a collection of domain objects
return $a;
});
The proxy object is accessed directly as the original object
The callback function passed in by the constructor method is called when the
This allows for delay in loading object operations
Echo $v->abc. $v->offsetget (50);
How PHP implements lazy loading of a file
The first display of the content out of the buffer, the contents of the back will not be affected by the previous content ...
The simple code is as follows:
Important to
echo rand (), ' first out ';
Ob_flush ();
Flush ();
Not important ...
Include "Big.avi";
Sleep (3);
Ob_flush ();
?>
From the question you added, I found that the code above was written in white!
Mud Horse ~ As a result you just need an AJAX lazy load!
How does php implement lazy loading?
The lazy load inside PHP is basically loading files on demand, instantiating objects on demand two parts
Loading files On demand is the work of spl_autoload_register, on-demand instantiation can be implemented with the above, but more will be used by a proxy loader to handle
http://www.bkjia.com/PHPjc/906675.html www.bkjia.com true http://www.bkjia.com/PHPjc/906675.html techarticle using Virtual Agent in PHP to implement lazy loading technology, PHP load say this is from the "Enterprise Application Architecture Model" of Martin great God, auxiliary php Dynamic language features, can compare ...