Permalink
Browse files

Initial creation of PHP FIG repo

- Added directory for proposed standards
- Added PSR-0 standard (accepted)
  • Loading branch information...
0 parents commit ab3b658ec9fae0ec6b1b93913c1c8789360b3755 @weierophinney weierophinney committed Nov 5, 2010
Showing with 64 additions and 0 deletions.
  1. +1 −0 README.md
  2. +63 −0 accepted/PSR-0.md
  3. 0 proposed/.placeholder
@@ -0,0 +1 @@
+Repository for maintaining Framework Interop Group specification proposals.
@@ -0,0 +1,63 @@
+The following describes the mandatory requirements that must be adhered
+to for autoloader interoperability.
+
+## Mandatory:
+* A fully-qualified namespace and class must have the following
+ structure \<Vendor Name>\(<Namespace>\)*<Class Name>
+* Each namespace must have a top-level namespace ("Vendor Name").
+* Each namespace can have as many sub-namespaces as it wishes.
+* Each namespace separator is converted to a DIRECTORY_SEPARATOR when
+ loading from the file system.
+* Each "_" character in the CLASS NAME is converted to a
+* DIRECTORY_SEPARATOR. The "_" character has no special meaning in the
+ namespace.
+* The fully-qualified namespace and class is suffixed with ".php" when
+ loading from the file system.
+* Alphabetic characters in vendor names, namespaces, and class names may
+ be of any combination of lower case and upper case.
+
+## Examples:
+* \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
+* \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
+* \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
+* \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
+
+## Underscores in namespaces and class names:
+* \namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
+* \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
+
+The standards we set here should be the lowest common denominator for
+painless autoloader interoperability. You can test that you are
+following these standards by utilizing this sample SplClassLoader
+implementation which is able to load PHP 5.3 classes.
+
+## Example Implementation
+
+Below is an example function to simply demonstrate how the above
+proposed standards are autoloaded.
+
+ <?php
+
+ function autoload($className)
+ {
+ $className = ltrim($className, '\\');
+ $fileName = '';
+ $namespace = '';
+ if ($lastNsPos = strripos($className, '\\')) {
+ $namespace = substr($className, 0, $lastNsPos);
+ $className = substr($className, $lastNsPos + 1);
+ $fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
+ }
+ $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
+
+ require $fileName;
+ }
+
+## SplClassLoader Implementation
+
+The following gist is a sample SplClassLoader implementation that can
+load your classes if you follow the autoloader interoperability
+standards proposed above. It is the current recommended way to load PHP
+5.3 classes that follow these standards.
+
+* http://gist.github.com/221634
No changes.

0 comments on commit ab3b658

Please sign in to comment.