所以我有一个包含基本内容的课程,比如
Class Test{
public function wheels(){
echo 'wheels';
}
}
和另一个
Class Test2{
public function bikes(){
$test = new Test();
return 'i am a bike with '.$test;
}
}
所以我的问题是,如果我在函数内部需要不同的类,那么调用它就像$ var = new ClassName();
还是有更好的方法在类函数中调用不同的类?
答案 0 :(得分:2)
不,这样做很好。我能给你的唯一建议是分配这样的变量:
$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();
}
}
答案 1 :(得分:1)
对于您的webapp,请编写一个自动加载器,它只是在您需要时从您要使用的文件中加载所有类。
然后,您可以只编写代码,而不需要在类之间构建复杂的继承,因为您想要使用已编码的功能。
这有多重好处:
那只是我的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();
每次实例化/访问类时,都会调用注册的自动加载器函数,但不存在。在示例中,假设每个文件有一个类是非常常见的,在我看来管理代码非常好。
由于自动加载器是一个回调函数,并且它是用PHP编写的,因此您可以在其中执行任何操作并使其更加详细,以满足您的需求。
希望这有帮助。
答案 2 :(得分:0)
这是OO中的常规做法,而不仅仅是PHP。如果您需要的$test
不仅仅是Test2.bikes()
,那么您应该将其声明为Class Test2
的全局变量。
答案 3 :(得分:0)
您的代码当然是合法的(除了需要调用$test->wheels
作为Tomasz的命令)然而,对于许多OOP语言,您在构造函数中指定内容,然后在方法调用中使用它们:
Class Test2{
private $test;
function __construct($test) {
$this->test = $test;
}
public function bikes(){
return 'i am a bike with '.$this->test->wheels();
}
}
如果您想动态更换车轮,情况尤其如此。
答案 4 :(得分:0)
通常这样做。虽然,如果您需要在类中的其他函数中使用新类,您可能希望在函数外部实例化一次,而不是每次都创建一个新对象。
答案 5 :(得分:0)
这取决于您需要的课程,您需要的课程以及您需要的课程。如果您需要一份新的副本,每次该功能运行时,您可能希望按照自己的方式进行。如果您不需要新副本(这就是您正在做的事情,如果您需要干净的副本,那么您正在执行正确 !!),但只是需要访问一些独立的方法,你可以考虑让子类成为你的类的子元素。
例如,如果你正在做一个更.net风格的OOP,你可以有这样的东西。哪种都有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) { ... }
}