PSR-4 is an accepted recommendation that outlines the standard for autoloading classes via filenames. This recommendation is recommended as the alternative to the earlier (and now deprecated) PSR-0.
The fully qualified class name should match the following requirement:
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
Alphabet
)Google\AdWord
)KeywordPlanner
)Thus the final class name would be Alphabet\Google\AdWord\KeywordPlanner
. The fully qualified class name should also translate into a meaningful file path therefore Alphabet\Google\AdWord\KeywordPlanner
would be located in [path_to_source]/Alphabet/Google/AdWord/KeywordPlanner.php
Starting with PHP 5.3.0, a custom autoloader function can be defined to load files based on the path and filename pattern that you define.
# Edit your php to include something like:
spl_autoload_register(function ($class) { include 'classes/' . $class . '.class.php';});
Replacing the location ('classes/') and filename extension ('.class.php') with values that apply to your structure.
Composer package manager supports PSR-4 which means, if you follow the standard, you can load your classes in your project automatically using Composer's vendor autoloader.
# Edit the composer.json file to include
{
"autoload": {
"psr-4": {
"Alphabet\\": "[path_to_source]"
}
}
}
Regenerate the autoloader file
$ composer dump-autoload
Now in your code you can do the following:
<?php
require __DIR__ . '/vendor/autoload.php';
$KeywordPlanner = new Alphabet\Google\AdWord\KeywordPlanner();
PSR-1 is an accepted recommendation and outlines a basic standard recommendation for how code should be written.
<?php
and <?=
but not <?
.PSR-8 is a spoof PSR (currently in Draft) proposed by Larry Garfield as an April Fools joke on 1 April 2014.
The draft outlines how to define an interface to make an object Huggable
.
Excert from the code outline:
<?php
namespace Psr\Hug;
/**
* Defines a huggable object.
*
* A huggable object expresses mutual affection with another huggable object.
*/
interface Huggable
{
/**
* Hugs this object.
*
* All hugs are mutual. An object that is hugged MUST in turn hug the other
* object back by calling hug() on the first parameter. All objects MUST
* implement a mechanism to prevent an infinite loop of hugging.
*
* @param Huggable $h
* The object that is hugging this object.
*/
public function hug(Huggable $h);
}