Transactions

• Combines individual sql operations into one
• Usually start with begin or begin transaction
• Execute the transaction using commit
• Cancel the transaction using rollback

Example

START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;

Object Cloning

Creating a copy of an object with fully replicated properties is not always the wanted behavior. A good example of the need for copy constructors, is if you have an object which represents a GTK window and the object holds the resource of this GTK window, when you create a duplicate you might want to create a new window with the same properties and have the new object hold the resource of the new window. Another example is if your object holds a reference to another object which it uses and when you replicate the parent object you want to create a new instance of this other object so that the replica has its own separate copy.

An object copy is created by using the clone keyword (which calls the object’s __clone() method if possible). An object’s __clone() method cannot be called directly.

$copy_of_object = clone $object;

When an object is cloned, PHP 5 will perform a shallow copy of all of the object’s properties. Any properties that are references to other variables will remain references.

__toString

The __toString() method allows a class to decide how it will react when it is treated like a string. For example, what echo $obj; will print. This method must return a string, as otherwise a fatal E_RECOVERABLE_ERROR level error is emitted.

Converting objects to strings

The magic method __tostring() is called, if available o

Includes print, string interpolation, operation with strings, calling functions that expect strings, …

Example

<?php
 class TestClass{
 public $foo;
 public function __construct($foo){
 $this->foo = $foo;
 }

public function __toString(){
 return $this->foo;
 }
 }
 $class = new TestClass('Hello');
 echo $class;
?>

Closures

Anonymous functions, implemented in PHP 5.3, yield objects of this type. This fact used to be considered an implementation detail, but it can now be relied upon. Starting with PHP 5.4, this class has methods that allow further control of the anonymous function after it has been created.

• Enable creation of functions without specifying a name

• Implemented using the closure class

• Commonly used as param value for callback functions, or alternatively as variable values

• To inherit variables from parent scope (function in which closure was declared), these variables must be declared in the function header with the “USE” keyword, or passing parameters in the call line

• new closure TYPE HINT

File Wrappers

o Provide information on protocols and encodings

 can be any file wrapper

 allows for two pipelines at most – for reading & writing

o Prefix in front of a file path

file:// php://
http:// compress.zlib://
https:// compress.bzip2://
ftp:// ftps://

o Custom Wrappers

stream_wrapper_register(protocol, classname)

Registers a protocol; implementation is part of the class.

 the class implements standard functionality like reading, writing, or changing the file position
 php_user_filter is a predefined class in php and is used in conjunction with user-defined filters

stream_context_create

Stream_context_create — Creates a stream context.

Creates and returns a stream context with any options supplied in options preset.

<?php
 $opts = array(
 'http'=>array(
 'method'=>"GET",
 'header'=>"Accept-language: en\r\n" .
 "Cookie: foo=bar\r\n"
 )
 );

$context = stream_context_create($opts);
 $fp = fopen('http://www.phpcodez.com', 'r', false, $context);
 fpassthru($fp);
 fclose($fp);
?>