如何从类内的函数访问单个或整个多个返回?
通常从一个函数,我可以访问多个返回,如
list($name, $number ) = functionFromSomeClass($a, $b, $c);
$n1 = $name;
$n2 = $number;
但是当这个函数在一个类中时,我似乎在访问整个或单个返回时遇到了问题
class MyClass{
public function newFunc( $var_1, $var_2 ) {
require_once('someOtherClass.php');
// process
list($name, $number ) = functionFromSomeOtherClass($a, $b, $c);
}
}
然后访问:
$myclass = new MyClass;
$name = $myclass->newFunc($q, $w)->$name;
或者,我该如何返回整个列表?
$myclass = new MyClass;
list($name, $number) = $myclass->newFunc($q, $w);
如果你想访问类中的另一个函数,你应该:
$this->functionFromSomeOtherClass($a, $b, $c);
换句话说:
class MyClass
{
public function newFunc( $var_1, $var_2 ) {
require_once('someOtherClass.php');
// process
$someotherclass = new someOtherClass();
list($name, $number ) = $someotherclass->functionFromSomeOtherClass($a, $b, $c);
}
}
使用语法时
list($var1, $var2, ...) = <expression>;
这只是意味着<expression>
必须对数组求值,并且变量将从数组的连续元素中分配。<expression>
可以是任何计算,包括函数或方法调用;你写它的方式和正常分配时一样。但如果是函数或方法调用,则函数/方法必须返回一个数组才能有效。
当从另一个类调用函数时,使用它并没有什么特别之处。
您需要创建另一个类的实例,或者将其作为静态函数调用,具体取决于方法的声明方式:
someOtherClass.php
:
class OtherClass
{
public function functionFromSomeOtherClass($a, $b, $c)
{
return $a + $b + $c;
}
}
MyClass.php
:
class MyClass{
public function newFunc( $var_1, $var_2 ) {
require_once('someOtherClass.php');
// Instance call:
$otherClass = new OtherClass();
list($name, $number ) = $otherClass->functionFromSomeOtherClass($a, $b, $c);
// Static call:
list($name, $number ) = OtherClass::functionFromSomeOtherClass($a, $b, $c);
}
}
如果我理解您的意思,那么您希望传递其他类的值,然后在调用函数时将它们传递到不同的位置。你可以用几种方法做到这一点。一种方法是,在函数中返回值。另一种方法是,您可以像这样声明公共类变量:
class MyClass{
public $name,$number;
public function newFunc( $var_1, $var_2 ) {
require_once('someOtherClass.php');
// process
list($this->name, $this->number ) = functionFromSomeOtherClass($a, $b, $c);
}
}
当你调用这样的函数时:
$myClass = new MyClass;
您可以简单地调用一个函数并在此处访问变量:
$myClass->newFunc($var1,$var2);
$n1 = $myClass->name;
$n2 = $myClass->number;
同样,另一个选项只是返回另一个类的结果,如下所示:
class MyClass{
public $name,$number;
public function newFunc( $var_1, $var_2 ) {
require_once('someOtherClass.php');
// process
$otherClass = new OtherClass;
return $otherCLass->functionFromSomeOtherClass($a, $b, $c);
}
}
$myClass = new MyClass;
list($name,$number) = $myClass->newFunc($var1,$var2);
如果这不是你想要的,正如我在评论中所建议的,那么有一个更详细的例子会有所帮助。
您甚至没有返回。
function get_multi() {
return array(1, 2, 3);
}
list($a, $b, $c) = get_multi();