你能解释下一个有趣的行为吗?
class test {
//Class *test* has two properties, public and private.
public $xpublic = 'x1';
private $xprivate = 'x2';
}
$testObj = new test();
Run Code Online (Sandbox Code Playgroud)
让我们转换$testObj为数组.
settype($testObj, 'array');
var_dump($testObj);
Run Code Online (Sandbox Code Playgroud)
结果:
array(2) {
["xpublic"]=> string(3) "x1"
["testxprivate"]=> string(4) "x2"
}
好的,xprivate财产变成了testxprivate
让我们将这个数组转换为object.
$newObj = (object)$testObj;
var_dump($newObj);
Run Code Online (Sandbox Code Playgroud)
结果:
object(stdClass)#1 (2) {
["xpublic"]=> string(3) "xxx"
["xprivate":"test":private]=> string(4) "xxx3"
}
$newObj是一个stdClass对象.
问题是:
为什么testxprivate成为新对象的私有财产xprivate(而不是testxprivate)?PHP如何知道该$testObj数组是一个对象?
如果我定义相等的数组:
$testArray = array('xpublic'=>'x1', 'testxprivate'=>'x2'); …Run Code Online (Sandbox Code Playgroud) 第一个例子:
$x = array("a" => 1, "b" => 2);
$y = array("b" => 1, "a" => 2);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
Run Code Online (Sandbox Code Playgroud)
结果:$ xLessY = true,$ xGreaterY = true
第二个例子:
$x = array("a" => 2, "b" => 1);
$y = array("b" => 2, "a" => 1);
$xLessY = ($x < $y);
$xGreaterY = ($x > $y);
var_dump($xLessY, $xGreaterY);
Run Code Online (Sandbox Code Playgroud)
结果:$ xLessY = false,$ xGreaterY = false
根据http://docs.php.net/manual/en/language.operators.comparison.php上的文档:
如果在操作数2中找不到操作数1的键,则数组是无法比较的,否则 …
下面的代码不能编译,因为x在 move 之后使用(因为x有 type &mut u8,它没有实现Copytrait)
fn main() {
let mut a: u8 = 1;
let x: &mut u8 = &mut a;
let y = x;
x;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,y隐式具有类型&mut u8
但是如果我明确指定y它编译的类型。以下代码编译
fn main() {
let mut a: u8 = 1;
let x: &mut u8 = &mut a;
let y: &mut u8 = x;
x;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果我更改let y: &mut u8 = x;到let y: &u8 = x; …
好吧,我有一个非常简单的例子:只是一个三角形,其z坐标等于1(无视图或投影矩阵).坐标是:
0.0, 0.6, 1.0
-0.5, -0.4, 1.0
0.5, -0.4, 1.0
Run Code Online (Sandbox Code Playgroud)
所以三角形位于最远的平面上.DEPTH_TEST已禁用.三角形是可见的,因为-1 <= z <= 1.但是当我启用DEPTH_TEST时:
gl.enable(gl.DEPTH_TEST);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)
三角形不再可见.当我将所有z坐标更改为-1(因此它位于最近的平面上)时,它再次变为可见.
那为什么在最远的飞机上看不到它?1)是webgl bug 2)它是webgl/opengl功能吗?3)如果它是一个功能,为什么它以这种方式工作?