我已经用PHP编程了好几年了,我刚刚开始研究面向对象的代码。现在我理解了课程等等:
class Myclass {
public function __construct() {
}
}
以及所有好东西......我也理解在index.php中创建函数和调用:
$someVar = new Myclass;
我一直在努力理解的一件事是,我最近看过codeigniter,我喜欢它的一件事,并且想要尝试在不使用codeigniter的情况下完成同样的事情。
在代码点火器中,他们有变量$ this似乎是他们的类变量。但是通过使用它,您可以同时从多个类中调用..例如:
$this->load->module(); which is in one class file..
$this->db->query(); which is in another class file.
我最近几天搜索谷歌试图弄清楚如何做同样的事情,每个类都有它们之间的相关性,所有允许我在我的项目中运行$ this-> class_name-> function_name而不是为每个类创建一个新变量,或者为了一个干净的索引文件,将每个函数都放在一个类文件中。
任何信息(除了买这本书 - 因为这对我来说都不是一个选项)非常感谢,我现在会感谢你(以后可能会再次感谢你的好评)。
答案 0 :(得分:0)
load
和db
引用是类属性,它们本身是分别具有公共module()
和query()
方法的其他对象。例如
class MyClass
{
/**
* @var CI_DB
*/
private $db;
/**
* @var Loader
*/
private $load;
public function __construct(CI_DB $db, Loader $load)
{
$this->db = $db;
$this->load = $load;
// PHP also allows you to add arbitrary object properties
// that receive a "public" visibility
// Please note, this is not a good practice
$this->foo = new Foo;
}
public function someMethod()
{
$this->load->module();
$this->db->query();
// You can also use foo even though it is not defined
// in the class properties
$this->foo->something();
}
}
请参阅http://www.php.net/manual/en/language.oop5.properties.php
像我们一样添加foo
属性是危险的。因为它接收到public
可见性,所以可以在类外部进行更改。
$class = new MyClass($db, $load);
$class->foo = new Bar;
$class->someMethod(); // will break if Bar does not contain a something() method
答案 1 :(得分:0)
我一直在读你和菲尔的评论。首先,您无法在$this
上使用index.php
。 $this
只能在对象的上下文中使用。所以你可以做到,
$someVar = new Myclass;
...
$someVar->db->something();
...来代替。
我不完全确定“阅读课程”是什么意思,但你可以像菲尔指示的那样将成员分配到MyClass
:
class MyClass {
private $inj;
function __construct(Injected $inj) {
$this->injected = $inj;
}
}
请注意,private $inj
声明不是强制性的,但跳过它是危险的。添加的任何未声明的成员都会自动public
,如果您依赖魔法获取,这可能会让您失望。我会声明你需要的属性。
最后,您需要包含要使用的所有类定义,使用load_class()
或use autoloading等函数。如果上面的Injected
不是声明的类,则在尝试创建类时会出错。 load_class()
几乎肯定会以某种方式包含类定义。