source: pro-violet-viettel/sourcecode/application/libraries/Doctrine/ORM/Query/AST/Node.php @ 345

Last change on this file since 345 was 345, checked in by quyenla, 11 years ago

collaborator page

File size: 3.0 KB
Line 
1<?php
2/*
3 *  $Id$
4 *
5 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16 *
17 * This software consists of voluntary contributions made by many individuals
18 * and is licensed under the LGPL. For more information, see
19 * <http://www.doctrine-project.org>.
20 */
21
22namespace Doctrine\ORM\Query\AST;
23
24/**
25 * Abstract class of an AST node
26 *
27 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
28 * @link    www.doctrine-project.org
29 * @since   2.0
30 * @version $Revision: 3938 $
31 * @author  Guilherme Blanco <guilhermeblanco@hotmail.com>
32 * @author  Jonathan Wage <jonwage@gmail.com>
33 * @author  Roman Borschel <roman@code-factory.org>
34 */
35abstract class Node
36{
37    /**
38     * Double-dispatch method, supposed to dispatch back to the walker.
39     *
40     * Implementation is not mandatory for all nodes.
41     *
42     * @param $walker
43     */
44    public function dispatch($walker)
45    {
46        throw ASTException::noDispatchForNode($this);
47    }
48
49    /**
50     * Dumps the AST Node into a string representation for information purpose only
51     *
52     * @return string
53     */
54    public function __toString()
55    {
56        return $this->dump($this);
57    }
58
59    public function dump($obj)
60    {
61        static $ident = 0;
62
63        $str = '';
64
65        if ($obj instanceof Node) {
66            $str .= get_class($obj) . '(' . PHP_EOL;
67            $props = get_object_vars($obj);
68
69            foreach ($props as $name => $prop) {
70                $ident += 4;
71                $str .= str_repeat(' ', $ident) . '"' . $name . '": '
72                      . $this->dump($prop) . ',' . PHP_EOL;
73                $ident -= 4;
74            }
75
76            $str .= str_repeat(' ', $ident) . ')';
77        } else if (is_array($obj)) {
78            $ident += 4;
79            $str .= 'array(';
80            $some = false;
81
82            foreach ($obj as $k => $v) {
83                $str .= PHP_EOL . str_repeat(' ', $ident) . '"'
84                      . $k . '" => ' . $this->dump($v) . ',';
85                $some = true;
86            }
87
88            $ident -= 4;
89            $str .= ($some ? PHP_EOL . str_repeat(' ', $ident) : '') . ')';
90        } else if (is_object($obj)) {
91            $str .= 'instanceof(' . get_class($obj) . ')';
92        } else {
93            $str .= var_export($obj, true);
94        }
95
96        return $str;
97    }
98}
Note: See TracBrowser for help on using the repository browser.