Инкапсуляция PHP без класса? - PullRequest
       1

Инкапсуляция PHP без класса?

1 голос
/ 10 августа 2011

Можно ли инкапсулировать, скажем, переменную или функцию в PHP, не заключая их в класс?Я делал следующее:

//Include the file containing the class which contains the variable or function
include('SomePage.php');

//Instantiate the class from "SomePage.php"
$NewObject = new SomeClassFromSomePage();

//Use the function or variable
echo $NewObject->SomeFuncFromSomeClass();
echo $NewObject->SomeVarFromSomeClass;

Я намерен избежать конфликта имен.Эта рутина, хотя она работает, заставляет меня уставать.Если я не могу сделать это без класса, можно не создать экземпляр класса?и просто использовать переменную или функцию мгновенно?

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

Чтобы использовать методы и переменные класса без создания экземпляров, они должны быть объявлены static:

class My_Class
{ 
    public static $var = 123;

    public static function getVar() {
     return self::var;
    }
}


// Call as:
My_Class::getVar();

// or access the variable directly:
My_Class::$var;

В PHP 5.3 вы также можете использовать пространства имен

namespace YourNamespace;

function yourFunction() {
  // do something...
}


// While in the same namespace, call as 
yourFunction();

// From a different namespace, call as
YourNamespace\yourFunction();
2 голосов
/ 10 августа 2011

Пространства имен PHP были созданы для того, чтобы заархивировать одну и ту же цель:

<?php // foo.php
namespace Foo;
function bar() {}
class baz {
    static $qux;
}
?>

При использовании функций пространства имен вызовов, таких как:

...