On 12/15/2011 01:05 PM, Alex Pojarsky wrote:
I'm not sure I've understood you correctly, but you may try something
like the following primitive autoloader (I didn't debug it, it's just
an example):
class Base
{
protected $_path = '';
public function construct($base_path)
{
$this->_path = $base_path;
}
public function __get($name)
{
$requested_path = $this->_path . DIRECTORY_SEPARATOR . $name;
if (is_dir($requested_path))
{
return new Base($requested_path);
}
else if (is_file($requested_path . '.php'))
{
include ($requested_path . '.php');
$classname = ucfirst($name);
return new $clasname();
}
}
}
// Assuming you have Mysql class in /home/user/project/classes/db/mysql.php
// you may try
$base = new Base("/home/user/project/classes/");
$base->db->mysql->someFunctionOfMysqlClass();
2011/12/15 Dominik Halvoník<dominik.halvonik@xxxxxxxxx>:
Hello,
I would like to ask you for help. This days I am trying to build one of my
applications. But I have problem which stopped me. I have folder whit php
files like connect.php, delete.php etc. These files contains classes named
the same as files. So in file connect.php is class Connect. These files are
placed in folder named mysql and this folder is inside folder named db. In
folder db is a php file named mysql.php, in this file I include classes
from folder mysql, after include I declare class MySQL and in it I have
method __construct(). In this method I create dynamic objects from included
classes. And this is the problem that I can not solve, I have more then one
of this files(mysql.php[whit class MySQL], oracle.php[whit class Oracle]
etc.) and I need to include them to file called db.php that is in the main
folder of my app. In db.php is an class called db, how can I add classes
MySQL, Oracle etc. to class db? I try to use abstract class whit __set and
__get methods but I also need to include class db to main class
application. I am really sorry for my English, so please be indulgent. So I
need to connect classes like this:
application->db->mysql->connect, but I can not use extends because in php
you can have only one parent class. The reason why I am trying to do
something like this is because I want to call methods like this:
$test = new application();
$test->db->connect();
If it is mysql or othet database I set in config.php file.
I need to achieve this schema( -> is something like ../ it means that it is
one level up folder):
connec.php(class Connect MySql)->
select.php(class Select MySql) ->
.... -> mysql.php(class MySQL include all classes, Connect...)->
.... ->
... ->
-> db.php(class db include all classes, MySQL, Oracle..)
connec.php(class Connect Oracle)->
select.php(class Select Oracle ) ->
.... -> oracle .php(class Oracle include all classes, Connect...)->
.... ->
... ->
download.php(class Download)->
unzip.php(class Unzip) ->
.... -> files.php(class Files include all classes, Download...) ->
file.php(class file include class Files)
.... ->
... ->
hash.php(class Hash)->
capcha.php(class Capcha) ->
.... -> secure.php(class Secure include all classes, Hash...) ->
security.php(class security include class Secure)
.... ->
... ->
ect. ect. ect. ect. ect. ect. ect. ect. ect. ect. ect. ect. ect. ect. ect.
And in the end, in the same folder as db.php and security.php I will have
file application.php which will contain class application and in its
__construct() method I will make link classes db, security, file ect. ect.
So I will just include file application.php make object from class
application and then just do $object->db->connect()(of course if it will by
MySql or other database will be stored in some config.php file).
Thanks,
Dominik
Why don't you modify include_path on initialization of 'Base' class?
would make things much simpler.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php