如何模块化 PHP 中的 class 方法?
How to modularize class methods in PHP?
我是 PHP 中的 OOP 新手。
我正在寻找如何模块化 php class 的最佳实践。我想要的是通过包含 php 文件来定义我的 class,然后为此 class 定义 "load" 方法。
下面是一些代码来说明我的意思:
<?php /* module.php */
class MyClass_Module {
public function foo(){
print_r("Hello welt");
}
}
<?php /* somewhere else */
class MyClass {
function __construct($optionen = array()){
require_once("module.php");
}
}
$myObj = new MyClass();
$myObj->foo();
您要找的是inheritance。
试试这个:
Class MyClass() {
public function Foo() {
return 'Hello';
}
}
Class MyExtendedClass extends MyClass() {
public function Bar() {
return 'World';
}
public function FooBar() {
return Parent::Foo().' '.$this->Bar();
}
}
$myObj = new MyExtendedClass;
echo $myObj->Foo(); // Outputs 'Hello';
echo $myObj->Bar(); // Outputs 'World';
echo $myObj->FooBar(); // Outputs 'Hello World';
要将它们保存在单独的文件中,您应该考虑使用 autoloader.
更新
如果您不是要访问相关功能,而是要处理其他几个 类,那么您需要的是 Dependency Injection。您正常实例化 类 然后将它们传递给其他 类 以使用它们。试试这个:
/* myworkerclass.php */
Class MyWorkerClass() {
public function Foo()
{
return 'Hello';
}
}
/* mypageclass.php */
Class MyPageClass() {
private $dbConn;
private $myWorkerObj;
public function __construct(mysqli $dbConn, MyWorkerClass $myWorkerObj)
{
$this->dbConn = $dbConn;
$this->myWorkerObj = $myWorkerObj;
}
public function Bar() {
return ' World';
}
public function OutputFooBar()
{
return $this->myWorkerObj->Foo().$this->Bar();
}
}
/* index.php */
$dbConn = new mysqli($host, $username, $password, $dbname);
$myWorkerObj = new MyWorkerClass;
$myPageObj = new MyPageClass($dbConn, $myWorkerObj);
echo $myPageObj->OutputFooBar(); // Outputs 'Hello World'
echo $myPageObj->myWorkerObj->Foo(); // Outputs 'Hello'
echo $myPageObj->Bar(); // Outputs ' World'
我认为您需要了解的是 autoload 功能。
__autoload($class)
允许您实例化任何 class,前提是 require
或 include
在 __autoload() 函数中。这是一个php oop 的非常强大的功能,因为它允许您包含一个具有 __autoload 函数的 php 文件,并且函数中声明的所有 classes 将自动包含并实例化..有关更多信息,您可以访问我提供的link..
也许你应该看看 Decorator 设计模式。
我通过使用特征找到了解决方案:
<?php /* module.php */
trait MyClass_Module {
public function foo(){
print_r("Hallo Welt");
}
}
<?php /* somewhere else */
require_once("module.php");
class MyClass {
use MyClass_Module;
}
$myObj = new MyClass();
$myObj->foo();
感谢所有给我答案的人 – 通过查看您的建议,我学到了很多东西。
我是 PHP 中的 OOP 新手。
我正在寻找如何模块化 php class 的最佳实践。我想要的是通过包含 php 文件来定义我的 class,然后为此 class 定义 "load" 方法。
下面是一些代码来说明我的意思:
<?php /* module.php */
class MyClass_Module {
public function foo(){
print_r("Hello welt");
}
}
<?php /* somewhere else */
class MyClass {
function __construct($optionen = array()){
require_once("module.php");
}
}
$myObj = new MyClass();
$myObj->foo();
您要找的是inheritance。
试试这个:
Class MyClass() {
public function Foo() {
return 'Hello';
}
}
Class MyExtendedClass extends MyClass() {
public function Bar() {
return 'World';
}
public function FooBar() {
return Parent::Foo().' '.$this->Bar();
}
}
$myObj = new MyExtendedClass;
echo $myObj->Foo(); // Outputs 'Hello';
echo $myObj->Bar(); // Outputs 'World';
echo $myObj->FooBar(); // Outputs 'Hello World';
要将它们保存在单独的文件中,您应该考虑使用 autoloader.
更新
如果您不是要访问相关功能,而是要处理其他几个 类,那么您需要的是 Dependency Injection。您正常实例化 类 然后将它们传递给其他 类 以使用它们。试试这个:
/* myworkerclass.php */
Class MyWorkerClass() {
public function Foo()
{
return 'Hello';
}
}
/* mypageclass.php */
Class MyPageClass() {
private $dbConn;
private $myWorkerObj;
public function __construct(mysqli $dbConn, MyWorkerClass $myWorkerObj)
{
$this->dbConn = $dbConn;
$this->myWorkerObj = $myWorkerObj;
}
public function Bar() {
return ' World';
}
public function OutputFooBar()
{
return $this->myWorkerObj->Foo().$this->Bar();
}
}
/* index.php */
$dbConn = new mysqli($host, $username, $password, $dbname);
$myWorkerObj = new MyWorkerClass;
$myPageObj = new MyPageClass($dbConn, $myWorkerObj);
echo $myPageObj->OutputFooBar(); // Outputs 'Hello World'
echo $myPageObj->myWorkerObj->Foo(); // Outputs 'Hello'
echo $myPageObj->Bar(); // Outputs ' World'
我认为您需要了解的是 autoload 功能。
__autoload($class)
允许您实例化任何 class,前提是 require
或 include
在 __autoload() 函数中。这是一个php oop 的非常强大的功能,因为它允许您包含一个具有 __autoload 函数的 php 文件,并且函数中声明的所有 classes 将自动包含并实例化..有关更多信息,您可以访问我提供的link..
也许你应该看看 Decorator 设计模式。
我通过使用特征找到了解决方案:
<?php /* module.php */
trait MyClass_Module {
public function foo(){
print_r("Hallo Welt");
}
}
<?php /* somewhere else */
require_once("module.php");
class MyClass {
use MyClass_Module;
}
$myObj = new MyClass();
$myObj->foo();
感谢所有给我答案的人 – 通过查看您的建议,我学到了很多东西。