関数・クラス解説
DOMDocument::registerNodeClass
version:PHP 5 >= 5.2.0, PHP 7 (公式)基底ノード型を作成する際に使用する拡張クラスを登録する
公式リファレンス
書式
public DOMDocument::registerNodeClass ( string $baseclass , string $extendedclass ) : bool
説明
このメソッドにより、独自に拡張した DOM クラスを登録することができます。 これを、後で PHP DOM 拡張モジュールで使用します。
このメソッドは、DOM の標準にはないものです。
パラメータ
- baseclass
- 拡張したい DOM クラス。クラス名の一覧は、 この章の導入部にあります。
- extendedclass
- 拡張したクラスの名前。NULL を渡した場合は、 それまでに baseclass を拡張して作成したすべてのクラスが削除されます。
返値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
サンプル
例1 新しいメソッドを DOMElement に追加し、コードを書きやすくする
class myElement extends DOMElement {
function appendElement($name) {
return $this->appendChild(new myElement($name));
}
}
class myDocument extends DOMDocument {
function setRoot($name) {
return $this->appendChild(new myElement($name));
}
}
$doc = new myDocument();
$doc->registerNodeClass('DOMElement', 'myElement');
// これ以降、他の要素への要素の追加が一回のメソッドコールでできるようになります!
$root = $doc->setRoot('root');
$child = $root->appendElement('child');
$child->setAttribute('foo', 'bar');
echo $doc->saveXML();
上の例の出力は以下となります。
<?xml version="1.0"?>
<root><child foo="bar"/></root>
例2 カスタムクラス形式での要素の取得
class myElement extends DOMElement {
public function __toString() {
return $this->nodeValue;
}
}
$doc = new DOMDocument;
$doc->loadXML("text in child ");
$doc->registerNodeClass("DOMElement", "myElement");
$element = $doc->getElementsByTagName("child")->item(0);
var_dump(get_class($element));
// __toString メソッドの助けを借ります..
echo $element;
上の例の出力は以下となります。
string(9) "myElement"
text in child
例3 オーナードキュメントの取得
自作の DOMDocument インスタンスを作成すると、 ownerDocument プロパティが作成元のクラスを指すようになります。 つまり DOMDocument の DOMDocument::registerNodeClass() を使う必要はない (実際、使えない) ということです。
class myDOMDocument extends DOMDocument {
}
class myOtherDOMDocument extends DOMDocument {
}
// XML から myDOMDocument を作成します
$doc = new myDOMDocument;
$doc->loadXML("text in child ");
$child = $doc->getElementsByTagName("child")->item(0);
// このノードの現在のオーナーは myDOMDocument です
var_dump(get_class($child->ownerDocument));
// ノードを myDOMDocument からインポートします
$newdoc = new myOtherDOMDocument;
$child = $newdoc->importNode($child);
// ノードの新しいオーナーは myOtherDOMDocument に変わりました
var_dump(get_class($child->ownerDocument));
上の例の出力は以下となります。
string(13) "myDOMDocument"
string(18) "myOtherDOMDocument"
例4 カスタムオブジェクトは一時的なもの
警告 登録されたノードクラスは、一時的なものです。 つまり、PHPコードから参照されなくなった時には破棄され、 再度取得される際に再生成されます。 これは、カスタムプロパティの値は再生成された時に失われるということです。
class MyDOMElement extends DOMElement
{
public $myProp = 'default value';
}
$doc = new DOMDocument();
$doc->registerNodeClass('DOMElement', 'MyDOMElement');
$node = $doc->createElement('a');
$node->myProp = 'modified value';
$doc->appendChild($node);
echo $doc->childNodes[0]->myProp, PHP_EOL;
unset($node);
echo $doc->childNodes[0]->myProp, PHP_EOL;
上の例の出力は以下となります。
modified value
default value
ワード検索
※入力キーワードが、関数名・説明文・タグに含まれるものを検索関数名アルファベット別
最終更新一覧
●stristr
大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却
●stripslashes
バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く
●stripos
大文字小文字を区別せずに文字列が最初に現れる位置を取得する
●stripcslashes
addcslashes() でクォートされた文字列をアンクォートする
●strip_tags
文字列から HTML と PHP のタグを除去して返却
●strcspn
指定した文字が最初に現れる位置を調べる
●strcoll
ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する
●strcmp
2つの文字列を比較し同じか(あるいは大小)を判定する
●strchr
strstr() のエイリアス
●strcasecmp
2つの文字列を比較(大文字小文字を区別せず同じとみなす)
カテゴリー一覧
PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール