Bu olarak adlandırıldı birine bir ana kapsamında kullanılmak üzere dahil bir dosya için yine de var mı? Aşağıdaki örnek basitleştirilmiş, ancak aynı işi yapar edilir.
Özünde, bir dosya bir fonksiyon tarafından dahil edilecek, ancak dahil işlevi çağrıldı nerede kapsamı olması dahil dosya kapsamını istiyorum.
main.php:
<?php
if(!function_exists('myPlugin'))
{
function myPlugin($file)
{
if(file_exists($file)
{
require $file;
return true;
}
return false;
}
}
$myVar = 'something bar foo';
$success = myPlugin('included.php');
if($success)
{
echo $myResult;
}
included.php:
<?php
$myResult = strlen($myVar);
Thanks in advance,
Alexander.
EDIT: Solution
Well, sort of, thanks to the contributions by Chacha102.
Can be called from within a class now too!
main.php
<?php
class front_controller extends controller
{
public function index_page()
{
$myVar = 'hello!';
// This is the bit that makes it work.
// I know, wrapping it in an extract() is ugly,
// and the amount of parameters that you can't change...
extract(load_file('included.php', get_defined_vars(), $this));
var_dump($myResult);
}
public function get_something()
{
return 'foo bar';
}
}
function load_file($_file, $vars = array(), &$c = null)
{
if(!file_exists($_file))
{
return false;
}
if(is_array($vars))
{
unset($vars['c'], $vars['_file']);
extract($vars);
}
require $_file;
return get_defined_vars();
}
included.php:
<?php
$myResult = array(
$myVar,
$c->get_something()
);
Eğer bir yöntem başvurmak istiyorsanız, kamu olmak zorunda, ama beklendiği gibi sonuç:
array(2) {
[0]=>
string(6) "hello!"
[1]=>
string(7) "foo bar"
}
Şimdi, bu gerçekten herhangi bir pratik kullanımı yoktur, ve ben inatçı çünkü ben bunu bilmek istedim tek nedeni budur. Düşünce aklıma geldi ve beni yenmek izin vermedi: D
<rant>
Thanks to all who contributed. Except the person who boo'd me. It was a simple enough question, and have now figured out that (complicated) solution exists.
Screw whether it "conforms to the PHP way of doing things". Ever told a client "Oh no, we shouldn't do that, it's not the correct way to do things!"? Thought not.
</rant>
Tekrar teşekkürler Chacha102 için :)