No. You cannot include files in the class body.
In a file defining a class, you may only include files in a method body or outside the class body.
Açıklamasından ben bunu istiyorum almak:
<?php // MyClass.php
class MyClass
{
protected $_prop;
include 'myclass-methods.php';
}
<?php // myclass-methods.php
public function myMethod()
{
$this->$_prop = 1;
}
Bu kodu çalıştırmadan neden olacaktır
Parse error: syntax error, unexpected T_INCLUDE, expecting T_FUNCTION
Ne olsa mümkün bu
<?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;
}
Bu şekilde yaparak, yöntemi kapsamında değil, sınıf kapsamı içine dahil dosyasının içeriğini ithal edecek. Sen dahil dosyasındaki işlevleri ve değişkenleri içerir, ama yöntemleri olabilir. Sen could but should not içine de tüm komut koymak ve örneğin, yöntemi ne değiştirebilir
<?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';
Ancak, sınıf farklı bir davranış sergilemek için bu şekilde yama OOP bunu nasıl değildir. Bu sadece düz yanlış ve gözlerinden kan yapmalıdır.
Dinamik davranışı değiştirmek istediğiniz beri sınıfını genişleterek (neden aşağıya bakınız) da iyi bir seçenek değildir. Ne gerçekten yapmak isteyeceğiniz bir interface yazmak ve sınıf nesneleri kullanma uygun yöntemleri mevcuttur emin nedenle, bu arabirimi uygulayan olun. Bu Strategy Pattern denir ve bu gibi çalışır:
<?php // Meowing.php
interface Meowing
{
public function meow();
}
Şimdi tüm meowing Davranışlar yani bir miyav yöntem olan, itaat etmeliyiz sözleşme var. Sonraki Meowing Davranış tanımlamak:
<?php // RegularMeow.php
class RegularMeow implements Meowing
{
public function meow()
{
return 'meow';
}
}
Şimdi kullanmak için kullanın:
<?php // Cat.php
class Cat
{
protected $_meowing;
public function setMeowing(Meowing $meowing)
{
$this->_meowing = $meowing;
}
public function meow()
{
$this->_meowing->meow()
}
}
Ekleyerek TypeHint setMeowing için Meowing, sen geçti param Meowing arabirimini uygulayan emin olun. Başka bir Meowing Davranış açıklayalım:
<?php // LolkatMeow.php
class LolkatMeow implements Meowing
{
public function meow()
{
return 'lolz xD';
}
}
Şimdi, kolayca bu gibi davranışları gistirilip:
<?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';
Aynı zamanda bir abstract BaseCat ve miyav yöntemi tanımlarken ve o somut RegularCat ve Lolkat sınıflar türetmek inheritance ile yukarıdaki çözmüş olsa da, size ulaşmak istediğiniz göz önünde bulundurmanız gerekir . Lütfen kediler miyav biçimini asla değişmeyecek, devam edin ve devralma kullanmak, ancak RegularCat ve Lolkat keyfi meows yapmak mümkün olması gerekiyordu ise, o Strateji desen kullanın.
Daha design patterns PHP, bu kaynakları kontrol için: