如何严格设置 PHP 中变量的大小?

How to strictly set size for a variable in PHP?

在PHP中有一个函数,叫做settype,用来设置一个变量的类型。我知道我们可以使用 strlen 等函数定义变量大小的条件。但实际上,我想知道是否有像 settype 这样的函数来设置 PHP 中变量的大小?像这样:

setsize($var, 10);  #for example: size of $var is equal to 10 characters.

实际上 PHP. 中没有 Setsize 本机函数来回答您的问题。 事实上,大小的定义可能是模棱两可的,因为在您的 question.The 中使用大小可以参考 为变量分配的内存数量 。如果我们参考这个定义 绝对没有办法直接在PHP中为单个变量设置固定大小。大小也可以指字符串或数组时变量的长度或数字number.In 这种情况下的数字也没有 指定固定长度的本机方法 。 但是,您可以使用 自定义函数或 class .

来实现此目的

事实上,我们已经在 PHP 中得到了一个原生的示例,但仅限于数组,SPLFixedArray class 顾名思义,它允许我们处理固定长度的数组。

因此,如果您的需求只是关于长度,您可以构建一个 class 或一个函数来处理赋值,从而控制变量的长度 yourself.But 任何没有此 class/function 的赋值不会阻止可变长度的数据......: 示例:

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

当然,这个示例非常基础,因为它只处理 assignation.In 数组的情况,您可以实现 ArrayAccess 接口,但您必须遵守尝试为数据赋值的不同函数中的相同逻辑。