[https://www.php.net/manual/en/function.is-integer.php is_integer()] is an alias for [https://www.php.net/manual/en/function.is-int.php is_int()]. While they function identically, the WordPress Coding Standards and modern PHP practices generally lean towards using the official function name rather than its alias to maintain consistency across the codebase. Props Soean, westonruter, SergeyBiryukov. See #64913. Built from https://develop.svn.wordpress.org/trunk@62175 git-svn-id: http://core.svn.wordpress.org/trunk@61457 1a063a9b-81f0-0310-95a4-ce76da25c4cd
139 lines
3.7 KiB
PHP
139 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* IXR_Value
|
|
*
|
|
* @package IXR
|
|
* @since 1.5.0
|
|
*/
|
|
class IXR_Value {
|
|
var $data;
|
|
var $type;
|
|
|
|
/**
|
|
* PHP5 constructor.
|
|
*/
|
|
function __construct( $data, $type = false )
|
|
{
|
|
$this->data = $data;
|
|
if (!$type) {
|
|
$type = $this->calculateType();
|
|
}
|
|
$this->type = $type;
|
|
if ($type == 'struct') {
|
|
// Turn all the values in the array in to new IXR_Value objects
|
|
foreach ($this->data as $key => $value) {
|
|
$this->data[$key] = new IXR_Value($value);
|
|
}
|
|
}
|
|
if ($type == 'array') {
|
|
for ($i = 0, $j = count($this->data); $i < $j; $i++) {
|
|
$this->data[$i] = new IXR_Value($this->data[$i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* PHP4 constructor.
|
|
*/
|
|
public function IXR_Value( $data, $type = false ) {
|
|
self::__construct( $data, $type );
|
|
}
|
|
|
|
function calculateType()
|
|
{
|
|
if ($this->data === true || $this->data === false) {
|
|
return 'boolean';
|
|
}
|
|
if (is_int($this->data)) {
|
|
return 'int';
|
|
}
|
|
if (is_double($this->data)) {
|
|
return 'double';
|
|
}
|
|
|
|
// Deal with IXR object types base64 and date
|
|
if (is_object($this->data) && is_a($this->data, 'IXR_Date')) {
|
|
return 'date';
|
|
}
|
|
if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) {
|
|
return 'base64';
|
|
}
|
|
|
|
// If it is a normal PHP object convert it in to a struct
|
|
if (is_object($this->data)) {
|
|
$this->data = get_object_vars($this->data);
|
|
return 'struct';
|
|
}
|
|
if (!is_array($this->data)) {
|
|
return 'string';
|
|
}
|
|
|
|
// We have an array - is it an array or a struct?
|
|
if ($this->isStruct($this->data)) {
|
|
return 'struct';
|
|
} else {
|
|
return 'array';
|
|
}
|
|
}
|
|
|
|
function getXml()
|
|
{
|
|
// Return XML for this value
|
|
switch ($this->type) {
|
|
case 'boolean':
|
|
return '<boolean>'.(($this->data) ? '1' : '0').'</boolean>';
|
|
break;
|
|
case 'int':
|
|
return '<int>'.$this->data.'</int>';
|
|
break;
|
|
case 'double':
|
|
return '<double>'.$this->data.'</double>';
|
|
break;
|
|
case 'string':
|
|
return '<string>'.htmlspecialchars($this->data).'</string>';
|
|
break;
|
|
case 'array':
|
|
$return = '<array><data>'."\n";
|
|
foreach ($this->data as $item) {
|
|
$return .= ' <value>'.$item->getXml()."</value>\n";
|
|
}
|
|
$return .= '</data></array>';
|
|
return $return;
|
|
break;
|
|
case 'struct':
|
|
$return = '<struct>'."\n";
|
|
foreach ($this->data as $name => $value) {
|
|
$name = htmlspecialchars($name);
|
|
$return .= " <member><name>$name</name><value>";
|
|
$return .= $value->getXml()."</value></member>\n";
|
|
}
|
|
$return .= '</struct>';
|
|
return $return;
|
|
break;
|
|
case 'date':
|
|
case 'base64':
|
|
return $this->data->getXml();
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Checks whether or not the supplied array is a struct or not
|
|
*
|
|
* @param array $array
|
|
* @return bool
|
|
*/
|
|
function isStruct($array)
|
|
{
|
|
$expected = 0;
|
|
foreach ($array as $key => $value) {
|
|
if ((string)$key !== (string)$expected) {
|
|
return true;
|
|
}
|
|
$expected++;
|
|
}
|
|
return false;
|
|
}
|
|
}
|