Pas de. Vous ne pouvez pas inclure les fichiers dans le corps de la classe.
Dans un fichier de définition d'une classe, vous ne pouvez inclure des fichiers dans un corps de méthode ou à l'extérieur du corps de classe.
À partir de votre description je vous le voulez ce:
<?php // MyClass.php
class MyClass
{
protected $_prop;
include 'myclass-methods.php';
}
<?php // myclass-methods.php
public function myMethod()
{
$this->$_prop = 1;
}
L'exécution de ce code entraînera
Parse error: syntax error, unexpected T_INCLUDE, expecting T_FUNCTION
Ce qui est possible mais est-ce
<?php // MyClass.php
class MyClass
{
protected $_prop;
public function __construct() // or any other method
{
include 'some-functions.php';
foo($b); // echoes 'a';
}
}
<?php // some-functions.php
$b = 'a';
function foo($str)
{
echo $str;
}
Faisant de cette façon, va importer le contenu d'un fichier à inclure dans la portée de la méthode, pas à la portée de classe. Vous pouvez inclure des fonctions et des variables dans le fichier include, mais pas les méthodes. Vous pourriez, mais ne devrait pas mettre des scripts complets ainsi modifier la méthode est le cas, par exemple,
<?php // MyClass.php
// ...
public function __construct($someCondition)
{
// No No Code here
include ($someCondition === 'whatever') ? 'whatever.php' : 'default.php';
}
// ...
<?php // whatever.php
echo 'whatever';
<?php // default.php
echo 'foo';
Toutefois, l'application de correctifs à la classe de cette façon à exposer les différentes comportement n'est pas la façon dont vous devriez le faire en POO. C'est tout simplement faux et devrait rendre vos yeux saignent.
Puisque vous voulez modifier dynamiquement le comportement, l'extension de la classe est également pas une bonne option (voir ci-dessous pourquoi). Vraiment ce que vous voulez faire est d'écrire une interface et de rendre votre utilisation des objets implémentant cette interface, afin de s'assurer que les méthodes appropriées sont disponibles. Ceci est appelé un Modèle de Stratégie et fonctionne comme ceci:
<?php // Meowing.php
interface Meowing
{
public function meow();
}
Maintenant vous avez obtenu le contrat que tous les Miaulements des Comportements doit obéir, à savoir avoir un miaulement méthode. Prochaine définir un Miaulement Comportement:
<?php // RegularMeow.php
class RegularMeow implements Meowing
{
public function meow()
{
return 'meow';
}
}
Maintenant pour l'utiliser, utilisez:
<?php // Cat.php
class Cat
{
protected $_meowing;
public function setMeowing(Meowing $meowing)
{
$this->_meowing = $meowing;
}
public function meow()
{
$this->_meowing->meow()
}
}
En ajoutant le Miaulement TypeHint à setMeowing, vous assurez-vous que le passé param met en œuvre le Miaulement de l'interface. Nous allons définir un autre Miaulement Comportement:
<?php // LolkatMeow.php
class LolkatMeow implements Meowing
{
public function meow()
{
return 'lolz xD';
}
}
Maintenant, vous pouvez facilement interchange des comportements comme ceci:
<?php
require_once 'Meowing.php';
require_once 'RegularMeow.php';
require_once 'LolkatMeow.php';
require_once 'Cat.php';
$cat = new Cat;
$cat->setMeowing(new RegularMeow);
echo $cat->meow; // outputs 'meow';
// now to change the behavior
$cat->setMeowing(new LolkatMeow);
echo $cat->meow; // outputs 'lolz xD';
Alors que vous pourriez également avoir résolu le dessus avec de l'héritage par la définition d'un résumé BaseCat et miaou méthode, puis dérivant de béton RegularCat et Lolkat classes de cela, vous devez tenir compte de ce que vous voulez atteindre. Si votre chat ne sera jamais à changer la façon de miauler, aller de l'avant et à l'utilisation de l'héritage, mais si votre RegularCat et Lolkat est censé être capable de faire arbitraire miaule, puis utilisez le modèle de Stratégie.
Pour plus de design patterns en PHP, vérifiez ces ressources: