404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.144.35.147: ~ $
Design
======

Main assumption of the model is that the problem that we are to solve is the
problem of the very long class names in PHP libraries. We would not attempt
to take autoloader's job or create packaging model - only make names
manageable.

Namespaces are defined the following way:

Zend/DB/Connection.php:
<?php
namespace Zend\DB;

class Connection {
}

function connect() {
}
?>

Namespace definition does the following:
All class and function names inside are automatically prefixed with
namespace name. Inside namespace, local name always takes precedence over
global name. Several files may be using the same namespace.
The namespace declaration statement must be the very first statement in
the file. The only exception is "declare" statement that can be used before.

Every class and function in a namespace can be referred to by the full name
- e.g. Zend\DB\Connection or Zend\DB\connect - at any time.

<?php
require 'Zend/Db/Connection.php';
$x = new Zend\DB\Connection;
Zend\DB\connect();
?>

Namespace or class name can be imported:

<?php
require 'Zend/Db/Connection.php';
use Zend\DB;
use Zend\DB\Connection as DbConnection;

$x = new Zend\DB\Connection();
$y = new DB\connection();
$z = new DbConnection();
DB\connect();
?>

The use statement only defines name aliasing. It may create name alias for
namespace or class. The simple form of statement "use A\B\C\D;" is
equivalent to "use A\B\C\D as D;". The use statement can be used at any
time in the global scope (not inside function/class) and takes effect from 
the point of definition down to the end of file. It is recommended however to
place the use statements at the beginning of the file. The use statements have
effect only on the file where they appear.

The special "empty" namespace (\ prefix) is useful as explicit global
namespace qualification. All class and function names started from \
interpreted as global.

<?php 
namespace A\B\C;

$con = \mysql_connect(...);
?>

A special constant __NAMESPACE__ contains the name of the current namespace. 
It can be used to construct fully-qualified names to pass them as callbacks.

<?php
namespace A\B\C;

function foo() {
}

set_error_handler(__NAMESPACE__ . "\foo");
?>

In global namespace __NAMESPACE__ constant has the value of empty string.

Names inside namespace are resolved according to the following rules:

1) all qualified names are translated during compilation according to
current import rules. So if we have "use A\B\C" and then "C\D\e()"
it is translated to "A\B\C\D\e()".
2) unqualified class names translated during compilation according to
current import rules. So if we have "use A\B\C" and then "new C()" it
is translated to "new A\B\C()".
3) inside namespace, calls to unqualified functions that are defined in 
current namespace (and are known at the time the call is parsed) are 
interpreted as calls to these namespace functions.
4) inside namespace, calls to unqualified functions that are not defined 
in current namespace are resolved at run-time. The call to function foo() 
inside namespace (A\B) first tries to find and call function from current 
namespace A\B\foo() and if it doesn't exist PHP tries to call internal
function foo(). Note that using foo() inside namespace you can call only 
internal PHP functions, however using \foo() you are able to call any
function from the global namespace.
5) unqualified class names are resolved at run-time. E.q. "new Exception()"
first tries to use (and autoload) class from current namespace and in case 
of failure uses internal PHP class. Note that using "new A" in namespace 
you can only create class from this namespace or internal PHP class, however
using "new \A" you are able to create any class from the global namespace.
6) Calls to qualified functions are resolved at run-time. Call to
A\B\foo() first tries to call function foo() from namespace A\B, then
it tries to find class A\B (__autoload() it if necessary) and call its
static method foo()
7) qualified class names are interpreted as class from corresponding
namespace. So "new A\B\C()" refers to class C from namespace A\B.

Examples
--------
<?php
namespace A;
foo();   // first tries to call "foo" defined in namespace "A"
         // then calls internal function "foo"
\foo(); // calls function "foo" defined in global scope
?>

<?php
namespace A;
new B();   // first tries to create object of class "B" defined in namespace "A"
           // then creates object of internal class "B"
new \B(); // creates object of class "B" defined in global scope
?>

<?php
namespace A;
new A(); // first tries to create object of class "A" from namespace "A" (A\A)
         // then creates object of internal class "A"
?>

<?php
namespace A;
B\foo();   // first tries to call function "foo" from namespace "A\B"
            // then calls method "foo" of internal class "B"
\B\foo(); // first tries to call function "foo" from namespace "B"
            // then calls method "foo" of class "B" from global scope
?>

The worst case if class name conflicts with namespace name
<?php
namespace A;
A\foo();   // first tries to call function "foo" from namespace "A\A"
            // then tries to call method "foo" of class "A" from namespace "A"
            // then tries to call function "foo" from namespace "A"
            // then calls method "foo" of internal class "A"
\A\foo(); // first tries to call function "foo" from namespace "A"
            // then calls method "foo" of class "A" from global scope
?>

TODO
====

* Support for namespace constants?

* performance problems
  - calls to internal functions in namespaces are slower, because PHP first
    looks for such function in current namespace
  - calls to static methods are slower, because PHP first tries to look
    for corresponding function in namespace

* Extend the Reflection API?
  * Add ReflectionNamespace class
    + getName()
    + getClasses()
    + getFunctions()
    + getFiles()
  * Add getNamespace() methods to ReflectionClass and ReflectionFunction

* Rename namespaces to packages?


Filemanager

Name Type Size Permission Actions
CODING_STANDARDS File 11.7 KB 0644
CREDITS File 91 B 0644
EXTENSIONS File 20.4 KB 0644
LICENSE File 3.14 KB 0644
NEWS File 112.52 KB 0644
README.EXT_SKEL File 6.85 KB 0644
README.GIT-RULES File 4.91 KB 0644
README.MAILINGLIST_RULES File 3.35 KB 0644
README.NEW-OUTPUT-API File 5.11 KB 0644
README.PARAMETER_PARSING_API File 7.35 KB 0644
README.REDIST.BINS File 19.3 KB 0644
README.RELEASE_PROCESS File 12.63 KB 0644
README.SELF-CONTAINED-EXTENSIONS File 4.97 KB 0644
README.STREAMS File 15 KB 0644
README.SUBMITTING_PATCH File 7.94 KB 0644
README.TESTING File 6.54 KB 0644
README.TESTING2 File 4.84 KB 0644
README.UNIX-BUILD-SYSTEM File 4.16 KB 0644
README.WIN32-BUILD-SYSTEM File 109 B 0644
README.input_filter File 5.29 KB 0644
README.md File 1.57 KB 0644
README.namespaces File 5.9 KB 0644
TSRM_LICENSE File 1.28 KB 0644
ZEND_CHANGES File 36.29 KB 0644
ZEND_LICENSE File 2.75 KB 0644
libmagic_LICENSE File 1.63 KB 0644
phar_LICENSE File 4.58 KB 0644
php.ini-development File 68.95 KB 0644
php.ini-production File 68.98 KB 0644