[英]php oop classes call inside functions
所以我有一个 class 包含基本的东西,比如
Class Test{
public function wheels(){
echo 'wheels';
}
}
还有一个
Class Test2{
public function bikes(){
$test = new Test();
return 'i am a bike with '.$test;
}
}
所以我的问题是,如果我在 function 中需要不同的类,将其称为 $var = new ClassName(); 是一种好习惯吗?
或者有更好的方法在类函数中调用不同的类?
不,这样做很好。 我能给你的唯一建议是分配这样的变量:
$modelClass = new ModelClass();
但是您需要将您的列表更改为:
Class Test{
public function wheels(){
return 'wheels';
}
}
Class Test2{
public function bikes(){
$test = new Test();
return 'i am a bike with '.$test->wheels();
}
}
为您的 web 应用程序编写一个自动加载器,它只是从您想要在需要时使用的文件中加载所有类。
然后,您可以只编写您想要的代码,而无需在类之间构建复杂的 inheritance 只是因为您想利用您编写的功能。
这有很多好处:
那只是我的2美分。 如果你以后不喜欢自动加载器,你也可以改变它。 但它有助于让事情直截了当。
例子:
function my_autoloader_function($name) {
require(sprintf('%s/%s.php', $yourlibfolderdir, $name));
}
spl_autoload_register('my_autoloader_function');
// [...] (even in other files)
$obj = new Test5;
$obj->funcZalabri();
注册的自动加载器 function 每次在 class 不存在时被实例化/访问时都会被调用。 在示例中,假设每个文件有一个 class,这很常见,我认为管理代码非常好。
由于自动加载器是一个回调并且它是用 PHP 编写的,因此您可以在其中做任何您想做的事情,并使其更加详细以满足您的需求。
希望这可以帮助。
这是一般面向对象中的常规做法,而不仅仅是在 PHP 中。 如果您需要$test
不仅仅是Test2.bikes()
,那么您应该将其声明为Class Test2
的全局变量。
您的代码当然是合法的(除了需要像 Tomasz 提到的那样调用$test->wheels
之外)对于许多 OOP 语言,但是,您在构造函数中指定内容,然后在方法调用中使用它们:
Class Test2{
private $test;
function __construct($test) {
$this->test = $test;
}
public function bikes(){
return 'i am a bike with '.$this->test->wheels();
}
}
如果您想动态更换车轮,则尤其如此。
这就是你通常的做法。 虽然,如果您在 class 的其他函数中需要新的 class,您可能希望在函数之外实例化它一次,而不是每次都创建一个新的 object。
这取决于您需要的 class,以及您需要它的方式以及为什么需要它。 如果您需要一个全新的副本,每次 function 运行时,您可能希望按照自己的方式进行操作。 如果您不需要新副本(这就是您正在做的事情,如果您需要干净的副本,那么您做对了!!) ,但只需要访问一些独立的方法,您可以考虑制作子 class class 的子元素。
例如,如果你正在做更多的 .net 风格 OOP 你可以有这样的事情。 其中既有 styles 又有 OOP。 我意识到这不是表示 DOM 的有效或正确方式,但这是一个示例。
class Entity
{
private $children = array();
public addChild(Entity $entity) { ... }
public getChild($index) { ... }
public removeChild($index) { ... }
}
class Text : Entity //this is inheritence
{
private $text;
public setText($text) { ... }
public getText() { ... }
}
class Attributable : Entity
{
protected $attributes = array();
public setAttribute($key, $value) { ... }
public clearAttribute($key) { ... }
public getAttribute($key) { ... }
}
class Option : Attributable
{
public $text = new Text(); //this is a child element
}
class Select : Attributable
{
portected $options = array();
public addOption(Option $entity) { ... }
public getOption($index) { ... }
public removeOption($index) { ... }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.