当注册一个新的基本节点类型与registerNodeClass:它看起来像如果我重新使用创建的元素的变量名,然后自定义属性恢复到默认值.我实际上是想在一个循环中这样做,但这里有一个例子,我认为清楚地表明了我的意思:
<?php
class myDOMElement extends DOMElement
{
public $myProp = 'Some default';
}
$doc = new DOMDocument();
$doc->registerNodeClass('DOMElement', 'myDOMElement');
$node = $doc->createElement('a');
$node->myProp = 'A';
$doc->appendChild($node);
# This seems to alter node A in $doc, not what I expected:
$node = $doc->createElement('b');
$node->myProp = 'B';
$doc->appendChild($node);
# Note: $nodeC instead of $node, this works fine.
$nodeC = $doc->createElement('c');
$nodeC->myProp = 'C';
$doc->appendChild($nodeC);
foreach ($doc->childNodes as $n) {
echo 'Tag ', $n->tagName, ' myProp:', PHP_EOL;
var_dump($n->myProp);
}
Run Code Online (Sandbox Code Playgroud)
为什么我得到"Some …
我正在尝试编写一个函数,给定树结构,返回该树的副本,但在特定索引处更改节点.这是我到目前为止:
#[derive(Clone)]
pub enum Node {
Value(u32),
Branch(u32, Box<Node>, Box<Node>),
}
fn main() {
let root = Node::Branch(1, Box::new(Node::Value(2)), Box::new(Node::Value(3)));
zero_node(&root, 2);
}
pub fn zero_node (tree: &Node, node_index: u8) -> Node {
let mut new_tree = tree.clone();
fn zero_rec (node : &mut Node, node_count : u8, node_index : u8) -> u8 {
if (node_index == node_count) {
match node {
&mut Node::Value(_) => { *node = Node::Value(0); },
&mut Node::Branch(_, ref mut left, ref mut right) => { *node …Run Code Online (Sandbox Code Playgroud)