在PHP中,是否可以键入hint多维数组作为函数参数?
当然,您可以键入提示单个数组,如下所示:
function Example(array $parameter) {}
但是,如果一个函数需要参数是一个多维数组,有什么方法可以通过类型提示来强制执行吗?
如果您所说的DoubleArray
仅指Doubles(Floats)数组。然后,您可能想要使用自定义类来伪造它。请考虑下面的代码。请注意,初始数组包含strings
,但最终结果不包含:
<?php
class DoubleArray{
protected $instance;
public function __construct(array $arrDoubles) {
foreach($arrDoubles as $key=>$double) {
if(!is_double($double)){
unset($arrDoubles[$key]);
}
}
$this->instance = array_values($arrDoubles);
}
public function push($numDouble){
$this->instance[] = $numDouble;
}
public function get(){
return $this->instance;
}
}
$arr = array(2.35, 72.9, 88.45, 42.76, "No...", 57.77, "String is not Double");
$da = new DoubleArray($arr);
var_dump(getData($da));
function getData(DoubleArray $data){
// ALL ARRAY FUNCTIONS STILL APPLY TO THE $doubleArray VARIABLE
// HOWEVER TO GET THE CUSTOM DOUBLE ARRAY DATA, YOU MAY HAVE TO
// JUST CALL THE get() METHOD ON THE DoubleArray INSTANCE: $data
$doubleArray = $data->get();
return $doubleArray;
}
// THE var_dump(getData($da); ABOVE PRODUCES:
array (size=5)
0 => float 2.35
1 => float 72.93
2 => float 88.45
3 => float 42.76
4 => float 57.77
但是,如果DoubleArray
指的是Multidimensional Arrays
,您仍然可以使用自定义类来伪造它,如下所示。
<?php
class DoubleArray{
protected $instance;
public function __construct(array $arrMDDoubles) {
foreach($arrMDDoubles as $key=>$subArray) {
if(!is_array($subArray)){
throw new Exception("DoubleArray accepts only Multidimensional Arrays...");
}
}
$this->instance = $arrMDDoubles;
}
public function push($arrArray, $key=null){
if(!is_array($arrArray)){
throw new Exception("You can only Push an Array...");
}
if(!is_null($key)){
$this->instance[$key] = $arrArray;
}else{
$this->instance[] = $arrArray;
}
return $this;
}
public function get(){
return $this->instance;
}
}
$arr = array(array(2.35, 72.93,), array(88.45, 42.76), array("No...", 57.77, "String is not Double"));
$da = new DoubleArray($arr);
var_dump(getData($da));
function getData(DoubleArray $data){
// ALL ARRAY FUNCTIONS STILL APPLY TO THE $doubleArray VARIABLE
// HOWEVER TO GET THE CUSTOM DOUBLE ARRAY DATA, YOU MAY HAVE TO
// JUST CALL THE get() METHOD ON THE DoubleArray INSTANCE: $data
$doubleArray = $data->get();
return $doubleArray;
}
// THIS TIME THE THE var_dump(getData($da) ABOVE WOULD THROW AN EXCEPTION
// IF THE GIVEN ARRAY IS NOT MULTI-DIMENSIONAL BUT PRODUCE SOMETHING
// LIKE THIS OTHERWISE:
array (size=3)
0 =>
array (size=2)
0 => float 2.35
1 => float 72.93
1 =>
array (size=2)
0 => float 88.45
1 => float 42.76
2 =>
array (size=3)
0 => string 'No...' (length=5)
1 => float 57.77
2 => string 'String is not Double' (length=20)