~ubuntu-branches/ubuntu/wily/php-doctrine-common/wily-proposed

« back to all changes in this revision

Viewing changes to lib/Doctrine/Common/Reflection/Psr0FindFile.php

  • Committer: Package Import Robot
  • Author(s): David Prévot
  • Date: 2014-06-15 11:26:00 UTC
  • mfrom: (2.1.1 experimental)
  • Revision ID: package-import@ubuntu.com-20140615112600-sg4mgpwq9sfg4mre
Tags: 2.4.2-2
* Upload to unstable
* No tests if DEB_BUILD_OPTIONS contains nocheck

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/*
 
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
14
 *
 
15
 * This software consists of voluntary contributions made by many individuals
 
16
 * and is licensed under the MIT license. For more information, see
 
17
 * <http://www.doctrine-project.org>.
 
18
 */
 
19
 
 
20
namespace Doctrine\Common\Reflection;
 
21
 
 
22
/**
 
23
 * Finds a class in a PSR-0 structure.
 
24
 *
 
25
 * @author Karoly Negyesi <karoly@negyesi.net>
 
26
 */
 
27
class Psr0FindFile implements ClassFinderInterface
 
28
{
 
29
    /**
 
30
     * The PSR-0 prefixes.
 
31
     *
 
32
     * @var array
 
33
     */
 
34
    protected $prefixes;
 
35
 
 
36
    /**
 
37
     * @param array $prefixes An array of prefixes. Each key is a PHP namespace and each value is
 
38
     *                        a list of directories.
 
39
     */
 
40
    public function __construct($prefixes)
 
41
    {
 
42
        $this->prefixes = $prefixes;
 
43
    }
 
44
 
 
45
    /**
 
46
     * {@inheritDoc}
 
47
     */
 
48
    public function findFile($class)
 
49
    {
 
50
        $lastNsPos = strrpos($class, '\\');
 
51
        if ('\\' == $class[0]) {
 
52
            $class = substr($class, 1);
 
53
        }
 
54
 
 
55
        if (false !== $lastNsPos) {
 
56
            // namespaced class name
 
57
            $classPath = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 0, $lastNsPos)) . DIRECTORY_SEPARATOR;
 
58
            $className = substr($class, $lastNsPos + 1);
 
59
        } else {
 
60
            // PEAR-like class name
 
61
            $classPath = null;
 
62
            $className = $class;
 
63
        }
 
64
 
 
65
        $classPath .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
 
66
 
 
67
        foreach ($this->prefixes as $prefix => $dirs) {
 
68
            if (0 === strpos($class, $prefix)) {
 
69
                foreach ($dirs as $dir) {
 
70
                    if (is_file($dir . DIRECTORY_SEPARATOR . $classPath)) {
 
71
                        return $dir . DIRECTORY_SEPARATOR . $classPath;
 
72
                    }
 
73
                }
 
74
            }
 
75
        }
 
76
 
 
77
        return null;
 
78
    }
 
79
}