因此,我创建了一个类,允许您选择传入自身的新实例:
$num = 1;
while ($f = $get->fetch_array(MYSQLI_ASSOC)) {
if ( $num == 2 ) echo '<div class="divisor-slide">';
// rest of code
if ( $num == 2 ) echo '</div>';
$num++; if ( $num == 3 ) $num = 1;
}
这将如何执行?外部的ExampleObject的构造函数是首先调用还是内部的?
答案 0 :(得分:4)
在函数调用之前,必须先评估其所有参数。因此,将先调用new ExampleObject("Test2")
,然后再调用new ExampleObject("Test", <object created on first step>)
答案 1 :(得分:1)
自变量的求值由JLS 15.12.4.2描述。
摘录:
参数表达式(如果有)按从左到右的顺序计算 对。如果对任何参数表达式的求值完成 突然之间,那么右边任何参数表达式的任何部分都不会出现 被评估,并且方法调用突然完成 出于同样的原因。计算第j个参数的结果 expression是第j个参数值,表示1≤j≤n。
将其应用于您的案例,评估顺序为:
ExampleFunction(new ExampleObject("Test", new ExampleObject("Test2")));
- new ExampleObject("Test", new ExampleObject("Test2"))
- - "Test"
- - new ExampleObject("Test2")
- - - "Test2"
这是调用参数进行评估的顺序。这意味着依次new ExampleObject("Test", new ExampleObject("Test2"))
先评估new ExampleObject("Test2")
。
答案 2 :(得分:0)
由于Test ExampleObject需要ExampleObject对象,在此情况下为Test2 ExampleObject,因此将首先创建Test2 ExampleObject,然后创建Test ExampleObject,再创建ExampleFunction。
所以顺序是从内到外的。