其实 PHP 中没有 Setsize 原生函数。来回答你的问题。
事实上,在您的问题中,大小的定义可能是模棱两可的。大小可以指为变量分配的内存量。如果我们参考这个定义绝对没有办法直接在PHP中为单个变量设置一个固定大小。大小也可以指字符串或数组时变量的长度或数字中的位数。在这种情况下也有没有指定固定长度的原生方式。
但是,您可以使用 自定义函数或类 来实现这一点。
事实上,我们已经在 PHP 中获得了一个原生示例,但仅适用于数组,SPLFixedArray class 就像它的名字一样表示允许我们处理固定长度的数组。
因此,如果您的愿望只是长度,您可以构建一个类或函数来处理分配,从而自己控制变量的长度。但是没有此类/函数的任何分配都不会阻止可变长度的数据.. .:
示例:
class fixedLength{
protected $data,$length;
public function __construct($data,$length){
if(!is_int($length))
throw new InvalidArgumentException('the length must be an integer ,'.gettype($length).' given');
$this->length=$length;
if(is_array($data))
{
while(count($data)>$length)
{
array_pop($data);
}
$this->data=$data;
}
elseif(is_string($data))
{
$this->data=substr($data,0,$length);
}
elseif(is_int($data))
{
$this->data=(int)substr(strval($data),0,$length);
}
elseif(is_float($data))
{
$this->data=(float)substr(strval($data),0,$length);
}
else
{
throw new InvalidArgumentException('Can\'t handle '.gettype($data).' type');
}
}
public function __get($name)
{
return strtolower($name)==='data'?$this->data:false;
}
public function __set($name,$value)
{
if(strtolower($name)!=='data')
return false;
if(is_array($value))
{
while(count($value)>$this->length)
{
array_pop($value);
}
$this->data=$value;
}
elseif(is_string($value))
{
$this->data=substr($value,0,$this->length);
}
elseif(is_int($value))
{
$this->data=(int)substr(strval($value),0,$this->length);
}
elseif(is_float($value))
{
$this->data=(float)substr(strval($value),0,$this->length);
}
else
{
throw new InvalidArgumentException('Can\'t handle '.gettype($value).' type');
}
}
}
然后在你的代码中你可以这样做:
$int=new fixedLength(98565,3);//will keep 985
$int->data=189999;// will keep 189
var_dump($int->data);//output 189
当然这个例子是非常基本的,因为它只处理赋值。如果是数组,你可以实现ArrayAccess
接口,但您必须在尝试为数据赋值的不同函数中尊重相同的逻辑。