Ticket #10535: 10535.3.patch
File 10535.3.patch, 4.3 KB (added by , 14 years ago) |
---|
-
wp-includes/plugin.php
703 703 /** 704 704 * Build Unique ID for storage and retrieval. 705 705 * 706 * The old way to serialize the callback caused issues and this function is the 707 * solution. It works by checking for objects and creating an a new property in 708 * the class to keep track of the object and new objects of the same class that 709 * need to be added. 710 * 706 * Every hook callback needs to have a Unique ID to identify it within the 707 * hook registry, the global array $wp_filter. 708 * 711 709 * It also allows for the removal of actions and filters for objects after they 712 * change class properties. It is possible to include the property $wp_filter_id 713 * in your class and set it to "null" or a number to bypass the workaround. 714 * However this will prevent you from adding new classes and any new classes 715 * will overwrite the previous hook by the same class. 710 * change class properties. 716 711 * 717 712 * Functions and static method callbacks are just returned as strings and 718 713 * shouldn't have any speed penalty. 719 714 * 715 * PHP 5.3 anonymous functions are supported as well. 716 * 720 717 * @package WordPress 721 718 * @subpackage Plugin 722 719 * @access private … … 724 721 * @link http://trac.wordpress.org/ticket/3875 725 722 * 726 723 * @global array $wp_filter Storage for all of the filters and actions 727 * @param string $tag Used in counting how many hooks were applied 728 * @param callback $function Used for creating unique id 729 * @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. 730 * @param string $type filter or action 731 * @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. 724 * @param string $tag Obsolete, kept for backwards compability. 725 * @param callback $function Callback to create Unique ID of. 726 * @param int|bool $priority Obsolete, kept for backwards compability. 727 * @return string|bool Unique ID (string), or false on failure 732 728 */ 733 729 function _wp_filter_build_unique_id($tag, $function, $priority) { 734 global $wp_filter;735 static $filter_id_count = 0;736 730 737 if ( is_string($function) ) 731 // Global function hook or anonymous create_function()-hook. 732 if ( is_string( $function ) ) 738 733 return $function; 739 734 740 if ( is_object($function) ) { 741 // Closures are currently implemented as objects 735 // Closures are currently implemented as objects, cast everything 736 // else into an array. 737 if ( is_object( $function ) ) { 742 738 $function = array( $function, '' ); 743 739 } else { 744 740 $function = (array) $function; 745 741 } 742 743 // Shortcut bogus values. 744 if ( 2 !== count( $function ) || !is_string( $function[1] ) ) 745 return false; 746 746 747 if (is_object($function[0]) ) { 748 // Object Class Calling 749 if ( function_exists('spl_object_hash') ) { 750 return spl_object_hash($function[0]) . $function[1]; 751 } else { 752 $obj_idx = get_class($function[0]).$function[1]; 753 if ( !isset($function[0]->wp_filter_id) ) { 754 if ( false === $priority ) 755 return false; 756 $obj_idx .= isset($wp_filter[$tag][$priority]) ? count((array)$wp_filter[$tag][$priority]) : $filter_id_count; 757 $function[0]->wp_filter_id = $filter_id_count; 758 ++$filter_id_count; 759 } else { 760 $obj_idx .= $function[0]->wp_filter_id; 761 } 747 // Class and Object Hooks. 748 if ( is_object( $function[0] ) ) { 749 // Object Instance Hook. 750 $object_id = spl_object_hash( $function[0] ); 751 return $object_id . '->' . $function[1]; 752 } else if ( is_string( $function[0] ) ) { 753 // Static Class Hook. 754 return $function[0] . '::' . $function[1]; 755 } 762 756 763 return $obj_idx; 757 return false; 758 } 759 760 /** 761 * spl_object_hash replacement function 762 */ 763 if ( !function_exists('spl_object_hash') ) { 764 function spl_object_hash( $object ) { 765 if (!is_object($object)) { 766 trigger_error(__FUNCTION__ . "() expects parameter 1 to be object", E_USER_WARNING); 767 return null; 764 768 } 765 } else if ( is_string($function[0]) ) { 766 // Static Calling 767 return $function[0].$function[1]; 769 770 isset( $object->__oid__ ) || ($object->__oid__ = uniqid()); 771 772 return $object->__oid__; 768 773 } 769 774 } 770 775