我可以在PHP中传递一个类型作为参数吗


Can I pass a type as parameter in PHP?

我想传递(任何类型,而不仅仅是PHP的基元)type作为函数参数。更像是C++的模板。这在PHP中可能吗?虚码:

function foo(T a)
{
   $output = new T();
   //do something.
}

我尝试将类型名称作为字符串传递,然后将settype()用于该类型的变量,但settype()仅适用于PHP的基元类型。我的目标实际上是传递一个类类型作为参数。

如果你想实例化类似上面的东西,把类名作为字符串传递,然后实例化它怎么样!

function foo($obj_string)
{
    $object = new $obj_string();
    //do stuff with $object
}

我看到您已经接受了一个答案,但在最初的帖子中,它显示了在函数中传递一个对象变量。对于那些需要这样做的查看者,您可以这样做:

class Blah
{
    public $x = 123;
}

function Foo($b) {
    $class = get_class($b);
    $object = new $class();
    var_dump($object);
}
$aa = new Blah();
Foo($aa);

我意识到这有点过时了,但无论如何我都会留下一个答案,以防有帮助。

如果我要将一个对象作为参数传递给另一个对象,那将是在我实例化了对象参数并根据需要调整了属性之后。下面是我将如何进行的一个例子。我在PHP7.4.x上使用它,还没有在PHP8.x上进行测试。

Class Blah是在Class Blah对象中的属性$x从123更改为456之后将传递给Class Bleep实例的对象。

<?php
class Blah {
  public $x = 123;
  function __construct() {}
  function set_x($x) {
    $this->x = $x;
  }
  function get_x() {
    return $this->x;
  }
}
class Bleep {
  public $object;
  function __construct($object) {
    $this->object = $object;
  }
  function get_object_x() {
    return $this->object->get_x();
  }
}
// Example in use.
$obj_bla = new Blah();
print '<p>On instantiation of <u>$obj_bla</u> as a <strong>Blah</strong> object, $x = '.$obj_bla->get_x().'</p>';
$obj_bla->set_x(456);
print '<p>After using the method <i>set_x()</i> on <u>$obj_bla</u>, $x = '.$obj_bla->get_x().'</p>';
$obj_bleep = new Bleep($obj_bla);
print '<p>Instantiate <u>$obj_bleep</u> as a new <strong>Bleep</strong> object and pass it the instance of <u>$obj_bla</u> then use the <i>get_object_x()</i> method on <u>$obj_bleep</u> to get the value of x from the object that was passed = '.$obj_bleep->get_object_x().'</p>'
?>
相关文章: