php - автоматически создавать экземпляр myClass - PullRequest
0 голосов
/ 10 сентября 2010

У меня есть класс myClass в /myDir/myClass.php. Когда пользователь вводит URL:

http://mysite.com/myDir/myClass.php,  

Я хочу автоматически создать экземпляр myClass. Какую технику я могу использовать для этого? идея заключается в том, чтобы использовать каталог myDir в качестве верхнего уровня программ, которые пользователь может вызывать напрямую, но я не хочу добавлять instance_of_myClass = new myClass();, потому что тогда я не смогу расширить класс. Имеет ли это смысл?

class myClass
{    
  __construct()
  {
     echo "hello World";
     $this->myClass_report();
  }
  myClass_report()
  {
      // some code here
  }


}   

Ответы [ 5 ]

3 голосов
/ 10 сентября 2010

.htaccess:

#if You have access, omit RewriteBase and put the rule in http.conf,
#with a / in the beginning of the pattern.
RewriteBase /
RewriteCond $0 !=index.php
RewriteRule .* index.php?path=$0 [QSA,B]

index.php

//check if the file exists and it's allowed
if (!check_if_allowed_path(realpath($_GET['path']))) {
    //access denied; check e.g. against the document root or
    //something more complex
}
//or use autoload instead
include $_GET['path'];
$classname = basename($_GET['path'], '.php');
$instance = new $classname();
0 голосов
/ 10 сентября 2010

Использовать шаблон фабричного дизайна:

<?php
//Factory.php
include_once('Box.php');

class My_Factory
{
  private $this->outcome;

  public function __construct()
  {
    this->outcome = $this->doSomeWeirdShitToSetupTheFactoryAndBlueprintSomething();
  }

  private function doSomeWeirdShitToSetupTheFactoryAndBlueprintSomething()
  {
    //1+1
  }

  public function giveMeAnInstanceOfOutcome()
  {
    return new My_Box($this->outcome);
  }
}

Edit: я прочитал это снова, и у меня есть один вопрос: Почему вы хотите, чтобы пользователь набрал http://yourl/YourClass.php ???

Классы должны быть включены; никогда не загружался напрямую в браузер.

0 голосов
/ 10 сентября 2010

Я не понимаю, что вы пытаетесь сделать, но, возможно, это поможет:

Если вы хотите создать экземпляр myClass, но не хотите, чтобы new myClassбыть жестко запрограммированным везде, вы можете использовать фабрику (википедию) какого-то рода.

0 голосов
/ 10 сентября 2010

Если вы не создаете экземпляр с

$classINstance = new myClass();

Тогда у вас нет экземпляра класса. Это не имеет ничего общего с расширением класса.

Вы расширяете класс (я предполагаю, что вы имеете в виду наследование?), Затем вы создаете новый класс, который расширяет родительский класс. Чтобы использовать этот класс, вы также создаете новый экземпляр с оператором new.

По крайней мере, если вы не используете ключевое слово static для создания статических методов для класса.

У меня был быстрый поиск, может быть, взглянуть на этот вопрос принят ответ. Выглядит как хорошее резюме, которое может вам помочь:

OOP

Или я просто не понял, что ты имел в виду;)

0 голосов
/ 10 сентября 2010
class myClass
{    
  __construct()
  {
     echo "hello World";
     myClass_report();
  }
  myClass_report()
  {
      // some code here
  }


} 

$x = new myClass();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...