在PHP中,有一个名为settype
的函数,用于设置变量的类型。我知道我们可以使用像strlen
这样的函数来定义变量大小的条件。但实际上,我想知道是否有像settype
这样的函数来设置PHP中变量的大小?这样的事情:
setsize($var, 10); #for example: size of $var is equal to 10 characters.
实际上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
接口,但你必须在尝试为数据赋值的不同函数中遵循相同的逻辑。