Ticket #10535: 10535.2.patch
File 10535.2.patch, 4.1 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]; 747 // Class and Object Hooks. 748 if ( is_object( $function[0] ) ) { 749 // Object Instance Hook. 750 if ( function_exists( 'spl_object_hash' ) ) { 751 $object_id = spl_object_hash( $function[0] ); 751 752 } 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 } 762 763 return $obj_idx; 753 ob_start(); 754 debug_zval_dump( $function[0] ); 755 list( $object_id ) = explode(' ', ob_get_clean(), 2); 764 756 } 765 } else if ( is_string($function[0]) ) { 766 // Static Calling 767 return $function[0].$function[1]; 757 return $object_id . '->' . $function[1]; 758 } else if ( is_string( $function[0] ) ) { 759 // Static Class Hook. 760 return $function[0] . '::' . $function[1]; 768 761 } 762 763 return false; 769 764 } 770 765 771 766 ?>