Ticket #10535: 10535.9.patch
File 10535.9.patch, 4.8 KB (added by , 14 years ago) |
---|
-
wp-includes/plugin.php
708 708 /** 709 709 * Build Unique ID for storage and retrieval. 710 710 * 711 * The old way to serialize the callback caused issues and this function is the 712 * solution. It works by checking for objects and creating an a new property in 713 * the class to keep track of the object and new objects of the same class that 714 * need to be added. 715 * 711 * Every hook callback needs to have a Unique ID to identify it within the 712 * hook registry, the global array $wp_filter. 713 * 716 714 * It also allows for the removal of actions and filters for objects after they 717 * change class properties. It is possible to include the property $wp_filter_id 718 * in your class and set it to "null" or a number to bypass the workaround. 719 * However this will prevent you from adding new classes and any new classes 720 * will overwrite the previous hook by the same class. 715 * change class properties. 721 716 * 722 717 * Functions and static method callbacks are just returned as strings and 723 718 * shouldn't have any speed penalty. 724 719 * 720 * PHP 5.3 anonymous functions are supported as well. 721 * 725 722 * @package WordPress 726 723 * @subpackage Plugin 727 724 * @access private … … 729 726 * @link http://trac.wordpress.org/ticket/3875 730 727 * 731 728 * @global array $wp_filter Storage for all of the filters and actions 732 * @param string $tag Used in counting how many hooks were applied733 * @param callback $function Used for creating unique id734 * @param int|bool $priority Used in counting how many hooks were applied. If === false and $function is an object reference, we return the unique id only if it already has one, false otherwise.735 * @return string|bool Unique ID for usage as array key or false if $priority === false and $function is an object reference, and it does not already have a uniqe id.729 * @param string $tag Obsolete, kept for backwards compability. 730 * @param callback $function Callback to create Unique ID of. 731 * @param int|bool $priority Obsolete, kept for backwards compability. 732 * @return string|bool Unique ID (string), or false on failure 736 733 */ 737 734 function _wp_filter_build_unique_id($tag, $function, $priority) { 738 global $wp_filter;739 static $filter_id_count = 0;740 735 741 if ( is_string($function) ) 736 // Ensure that this is in a callable syntax 737 if ( false === is_callable( $function, true, $callable_name ) ) 738 return false; 739 740 // Global function hook or anonymous create_function()-hook. 741 if ( is_string( $function ) ) 742 742 return $function; 743 743 744 if ( is_object($function) ) {745 // Closures are currently implemented as objects744 // Closures are currently implemented as objects 745 if ( is_object( $function ) ) 746 746 $function = array( $function, '' ); 747 } else { 748 $function = (array) $function; 747 748 // Object Instance / Closure Hook 749 if ( is_object( $function[0] ) ) { 750 $object_id = wp_object_hash( $function[0] ); 751 return $object_id . '::' . $function[1]; 749 752 } 750 753 751 if (is_object($function[0]) ) { 752 // Object Class Calling 753 if ( function_exists('spl_object_hash') ) { 754 return spl_object_hash($function[0]) . $function[1]; 755 } else { 756 $obj_idx = get_class($function[0]).$function[1]; 757 if ( !isset($function[0]->wp_filter_id) ) { 758 if ( false === $priority ) 759 return false; 760 $obj_idx .= isset($wp_filter[$tag][$priority]) ? count((array)$wp_filter[$tag][$priority]) : $filter_id_count; 761 $function[0]->wp_filter_id = $filter_id_count; 762 ++$filter_id_count; 763 } else { 764 $obj_idx .= $function[0]->wp_filter_id; 765 } 754 // Static Class Hook 755 return $callable_name; 756 } 766 757 767 return $obj_idx; 768 } 769 } else if ( is_string($function[0]) ) { 770 // Static Calling 771 return $function[0].$function[1]; 758 /** 759 * get object hash 760 * 761 * Returns a unique hash per object. 762 * 763 * Proxy function for wordpress installments on servers 764 * with a PHP version < 5.3.0. 765 * 766 * @since 3.2 767 * @param object $object 768 * @return string unique object hash 769 */ 770 function wp_object_hash( $object ) { 771 static $prefix, $count = 0, $property = '__wphookobjhash__', $spl_function_exists; 772 773 if ( ! isset( $spl_function_exists ) ) 774 $spl_function_exists = function_exists( 'spl_object_hash' ); 775 776 // prefer spl_object_hash if available 777 if ( $spl_function_exists ) 778 return spl_object_hash( $object ); 779 780 // validate input 781 if ( !is_object( $object ) ) { 782 trigger_error( __FUNCTION__ . '() expects parameter 1 to be object', E_USER_WARNING ); 783 return null; 772 784 } 785 786 // setup prefix and counter to generate object hash, set it to object if not set 787 if ( ! isset( $prefix ) ) { 788 $prefix = uniqid(); 789 $property .= $prefix . '__'; 790 } 791 792 if ( ! isset( $object->$property ) ) 793 $object->$property = sprintf( '%s-%08d', $prefix , ++$count ); 794 795 return $object->$property; 773 796 } 774 797 775 798 ?>