(window.webpackJsonp=window.webpackJsonp||[]).push([[2481],{2889:function(a,s,e){"use strict";e.r(s);var t=e(31),n=Object(t.a)({},(function(){var a=this,s=a.$createElement,e=a._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"namespaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#namespaces"}},[a._v("#")]),a._v(" Namespaces")]),a._v(" "),e("h2",{attrs:{id:"declaring-namespaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#declaring-namespaces"}},[a._v("#")]),a._v(" Declaring namespaces")]),a._v(" "),e("p",[a._v("A namespace declaration can look as follows:")]),a._v(" "),e("ul",[e("li",[e("code",[a._v("namespace MyProject;")]),a._v(" - Declare the namespace "),e("code",[a._v("MyProject")])]),a._v(" "),e("li",[e("code",[a._v("namespace MyProject\\Security\\Cryptography;")]),a._v(" - Declare a nested namespace")]),a._v(" "),e("li",[e("code",[a._v("namespace MyProject { ... }")]),a._v(" - Declare a namespace with enclosing brackets.")])]),a._v(" "),e("p",[a._v("It is recommended to only declare a single namespace per file, even though you can declare as many as you like in a single file:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("namespace")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("First")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("A")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Define class A in the namespace First.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("namespace")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("Second")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("B")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Define class B in the namespace Second.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("namespace")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("C")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Define class C in the root namespace.")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),e("p",[a._v("Every time you declare a namespace, classes you define after that will belong to that namespace:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("namespace")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("Rectangle")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("Square")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("Circle")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),e("p",[a._v("A namespace declaration can be used multiple times in different files. The example above defined three classes in the "),e("code",[a._v("MyProject\\Shapes")]),a._v(" namespace in a single file. Preferably this would be split up into three files, each starting with "),e("code",[a._v("namespace MyProject\\Shapes;")]),a._v(". This is explained in more detail in the PSR-4 standard example.")]),a._v(" "),e("h2",{attrs:{id:"referencing-a-class-or-function-in-a-namespace"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#referencing-a-class-or-function-in-a-namespace"}},[a._v("#")]),a._v(" Referencing a class or function in a namespace")]),a._v(" "),e("p",[a._v("As shown in "),e("a",{attrs:{href:"http://stackoverflow.com/documentation/php/1021/namespaces/3304/declaring-namespaces",target:"_blank",rel:"noopener noreferrer"}},[a._v("Declaring Namespaces"),e("OutboundLink")],1),a._v(", we can define a class in a namespace as follows:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("namespace")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("Rectangle")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("...")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),e("p",[a._v("To reference this class the full path (including the namespace) needs to be used:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$rectangle")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Rectangle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n")])])]),e("p",[a._v("This can be shortened by importing the class via the "),e("code",[a._v("use")]),a._v("-statement:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Rectangle becomes an alias to MyProject\\Shapes\\Rectangle")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("use")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Rectangle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$rectangle")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Rectangle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n")])])]),e("p",[a._v("As for PHP 7.0 you can group various "),e("code",[a._v("use")]),a._v("-statements in one single statement using brackets:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("use")]),a._v(" MyProject\\Shapes\\"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v("\n Rectangle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("//Same as `use MyProject\\Shapes\\Rectangle`")]),a._v("\n Circle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("//Same as `use MyProject\\Shapes\\Circle`")]),a._v("\n Triangle"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("//Same as `use MyProject\\Shapes\\Triangle`")]),a._v("\n \n Polygon\\FiveSides"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(",")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("//You can also import sub-namespaces")]),a._v("\n Polygon\\SixSides "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("//In a grouped `use`-statement")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$rectangle")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Rectangle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n")])])]),e("p",[a._v("Sometimes two classes have the same name. This is not a problem if they are in a different namespace, but it could become a problem when attempting to import them with the "),e("code",[a._v("use")]),a._v("-statement:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("use")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Oval")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("use")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Languages"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Oval")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Apparantly Oval is also a language!")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Error!")]),a._v("\n\n")])])]),e("p",[a._v("This can be solved by defining a name for the alias yourself using the "),e("code",[a._v("as")]),a._v(" keyword:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("use")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Oval")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("as")]),a._v(" OvalShape"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("use")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Languages"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Oval")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("as")]),a._v(" OvalLanguage"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n")])])]),e("p",[a._v("To reference a class outside the current namespace, it has to be escaped with a "),e("code",[a._v("\\")]),a._v(", otherwise a relative namespace path is assumed from the current namespace:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("namespace")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// References MyProject\\Shapes\\Rectangle. Correct!")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$a")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("Rectangle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// References MyProject\\Shapes\\Rectangle. Correct, but unneeded!")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$a")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Rectangle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" \n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// References MyProject\\Shapes\\MyProject\\Shapes\\Rectangle. Incorrect!")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$a")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Shapes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Rectangle")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" \n\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// Referencing StdClass from within a namespace requires a \\ prefix")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// since it is not defined in a namespace, meaning it is global.")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// References StdClass. Correct!")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$a")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified"}},[e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("StdClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" \n\n"),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("// References MyProject\\Shapes\\StdClass. Incorrect!")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$a")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("new")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[a._v("StdClass")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v(" \n\n")])])]),e("h2",{attrs:{id:"declaring-sub-namespaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#declaring-sub-namespaces"}},[a._v("#")]),a._v(" Declaring sub-namespaces")]),a._v(" "),e("p",[a._v("To declare a single namespace with hierarchy use following example:")]),a._v(" "),e("div",{staticClass:"language-php extra-class"},[e("pre",{pre:!0,attrs:{class:"language-php"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("namespace")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token package"}},[a._v("MyProject"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Sub"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("Level")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("const")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token constant"}},[a._v("CONNECT_OK")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(";")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("class")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token class-name-definition class-name"}},[a._v("Connection")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("/* ... */")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[a._v("function")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function-definition function"}},[a._v("connect")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(")")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("{")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[a._v("/* ... */")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("}")]),a._v("\n\n")])])]),e("p",[a._v("The above example creates:")]),a._v(" "),e("p",[e("strong",[a._v("constant")]),a._v(" "),e("code",[a._v("MyProject\\Sub\\Level\\CONNECT_OK")])]),a._v(" "),e("p",[e("strong",[a._v("class")]),a._v(" "),e("code",[a._v("MyProject\\Sub\\Level\\Connection")]),a._v(" and")]),a._v(" "),e("p",[e("strong",[a._v("function")]),a._v(" "),e("code",[a._v("MyProject\\Sub\\Level\\connect")])]),a._v(" "),e("h2",{attrs:{id:"what-are-namespaces"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#what-are-namespaces"}},[a._v("#")]),a._v(" What are Namespaces?")]),a._v(" "),e("p",[a._v("The PHP community has a lot of developers creating lots of code. This means that one library’s PHP code may use the same class name as another library. When both libraries are used in the same namespace, they collide and cause trouble.")]),a._v(" "),e("p",[a._v("Namespaces solve this problem. As described in the PHP reference manual, namespaces may be compared to operating system directories that namespace files; two files with the same name may co-exist in separate directories. Likewise, two PHP classes with the same name may co-exist in separate PHP namespaces.")]),a._v(" "),e("p",[a._v("It is important for you to namespace your code so that it may be used by other developers without fear of colliding with other libraries.")]),a._v(" "),e("h4",{attrs:{id:"remarks"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#remarks"}},[a._v("#")]),a._v(" Remarks")]),a._v(" "),e("p",[a._v("From the "),e("a",{attrs:{href:"http://php.net/manual/en/language.namespaces.rationale.php",target:"_blank",rel:"noopener noreferrer"}},[a._v("PHP documentation"),e("OutboundLink")],1),a._v(":")]),a._v(" "),e("blockquote"),a._v(" "),e("p",[a._v("What are namespaces? In the broadest definition namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them. As a concrete example, the file foo.txt can exist in both directory /home/greg and in /home/other, but two copies of foo.txt cannot co-exist in the same directory. In addition, to access the foo.txt file outside of the /home/greg directory, we must prepend the directory name to the file name using the directory separator to get /home/greg/foo.txt. This same principle extends to namespaces in the programming world.")]),a._v(" "),e("p",[a._v("Note that top-level namespaces "),e("code",[a._v("PHP")]),a._v(" and "),e("code",[a._v("php")]),a._v(" are reserved for the PHP language itself. They should not be used in any custom code.")])])}),[],!1,null,null,null);s.default=n.exports}}]);