Morpha
Morpha

Reputation: 13

Does including classes that you don't use have impact on performance?

like

require "class.a.php";
require "class.b.php";
require "class.c.php";

class main{
 function main(){
   if(condition_is_met(){
      $this->something = new A();
   }else{
      $this->something = new B();
   }
 } 

}

Should the files be included in the condition check with require_once, and not all the time?

Upvotes: 1

Views: 85

Answers (4)

webbiedave
webbiedave

Reputation: 48887

PHP has to open the file and parse it so it has some impact. For a few files I wouldn't worry about it but it can get out of hand as your files increase. That's why there's autoload, which allows you to load class files only when needed, without having a long list of requires at the top of your files:

http://php.net/manual/en/language.oop5.autoload.php

Also take a look at spl_autoload_register:

http://www.php.net/manual/en/function.spl-autoload-register.php

Upvotes: 1

Chris
Chris

Reputation: 1037

Anytime you use include or require, PHP is basically copy/pasting the code from the required file into your code. So no matter where you put it, PHP is still opening the file, reading it and dropping it in there, it won't be affected by an if block. In other words, require is parsed before the code is actually run, so yes, you will take a (very small) performance hit even if require is put in an if block and never run. Keep in mind, this is a very small impact. Lastly if you are worried about it, I would use require_once - this ensures that this parsing does not happen twice, for example if a second required file requires the first file, this redundancy won't amount to a second performance hit.

Upvotes: 0

Shafiul
Shafiul

Reputation: 2910

The question is not clear. In the current code, I think all of the file(s) will get included, whether you use (declare variable of these classes) them or not. If you wan't to not load the class(es) you will not use, you can use the __autoload() function.

http://php.net/manual/en/language.oop5.autoload.php

Upvotes: 1

Manual5355
Manual5355

Reputation: 982

The only performance it should effect is the time to parse it, but I think that is preferred over complicated include logic hidden midway inside of your file. Not to mention that if you put the require inside of the if statement it is like you inserted that file's text inside of that if statement, which isn't right (and may not work).

Can anyone tell me if you can declare a class inside of a function/if statement?

Upvotes: 0

Related Questions