PDA

View Full Version : سوال: دسترسی به متغیرهای تعریف شده در فایل فراخوانی شده بصورت آرایه



Tarragon
پنج شنبه 27 تیر 1392, 15:12 عصر
با سلام و آرزوی قبولی طاعات و عبادات شما
محتوی فایل a.php :
<?php
$sss = 'sss';
$example = 'sample';

حالا بنده می خواهم در فایل b.php این متغیر ها رو بصورت یه آرایه داشته باشم یعنی :
$a['sss'] && $a['example'] رو با محتویاتشون در فایل a داشته باشیم.
حالا بنده چطوری می تونم این کارو انجام بدم.

فرزند کوروش
پنج شنبه 27 تیر 1392, 15:29 عصر
شما بایذ متغیرها رو بصورت ارایه ذخیره کنید و در صفحه دوم اونا رو صدا بزنید
صفحه a

$var = array();
$var['sss'] = 'sss';
$var['sample'] = 'sample';

صفحه b

nclude('a.php');
echo $var['sss'];

Tarragon
پنج شنبه 27 تیر 1392, 15:44 عصر
خب مسئله همینجاست که نمی خوام در صفحه اول بصورت ارایه ذخیره کنم.

Tarragon
جمعه 28 تیر 1392, 04:21 صبح
up.........

2undercover
جمعه 28 تیر 1392, 09:31 صبح
با استفاده از تابع compact:

صفحه ی b :


include 'a.php';
$a = compact('sss', 'example');

Tarragon
جمعه 28 تیر 1392, 12:56 عصر
سلام
خیلی ممنونم
اگر اسم قواعد رو نداشته باشیم چی؟
یعنی بخواهیم بصورت اتوماتیک تمام متغیر های داخل a.php رو compact کنیم چی؟

MMSHFE
جمعه 28 تیر 1392, 13:37 عصر
محتوای a.php :


<?php
$sss = 'sss';
$example = 'sample';
?>

محتوای b.php :


<?php
$xyz = 'xyz';
$sample = 'example';
?>

محتوای index.php :


<?php
function GetDefinedVariables($fileName) {
global $$fileName;
$$fileName = array();
$old_vars = get_defined_vars();
include $fileName . '.php';
$new_vars = get_defined_vars();
foreach($new_vars as $key => $value) {
if(isset($old_vars[$key]) || $key == 'old_vars') {
unset($new_vars[$key]);
}
else {
$$fileName = array_merge($$fileName, array($key => $value));
}
}
return $$fileName;
}
GetDefinedVariables('a');
echo '<pre>' . print_r($a, true) . '</pre>';
GetDefinedVariables('b');
echo '<pre>' . print_r($b, true) . '</pre>';
?>

MMSHFE
جمعه 28 تیر 1392, 15:34 عصر
دوست عزیز مطمئن هستین سؤال رو درست متوجه شدین؟ بعلاوه کد شما بعید میدونم درست کار کنه. مثلاً substr رو روی array$ استفاده کردین که یک آرایه است نه یک رشته. کد رو تست کردین؟ اصلاً بحث دریافت مقادیر با روش GET و... نبوده. مسئله، استخراج متغیرهای تعریف شده توی فایلهایی هست که include میشن، اونهم بصورت آرایه با اسم فایل مربوطه.

engmmrj
شنبه 29 تیر 1392, 15:50 عصر
محتوای a.php :


<?php
$sss = 'sss';
$example = 'sample';
?>

محتوای b.php :


<?php
$xyz = 'xyz';
$sample = 'example';
?>

محتوای index.php :


<?php
function GetDefinedVariables($fileName) {
global $$fileName;
$$fileName = array();
$old_vars = get_defined_vars();
include $fileName . '.php';
$new_vars = get_defined_vars();
foreach($new_vars as $key => $value) {
if(isset($old_vars[$key]) || $key == 'old_vars') {
unset($new_vars[$key]);
}
else {
$$fileName = array_merge($$fileName, array($key => $value));
}
}
return $$fileName;
}
GetDefinedVariables('a');
echo '<pre>' . print_r($a, true) . '</pre>';
GetDefinedVariables('b');
echo '<pre>' . print_r($b, true) . '</pre>';
?>

شما برای تعریف متغیر از 2 $ استفاده کردین علت این کار چیست ؟

MMSHFE
شنبه 29 تیر 1392, 15:56 عصر
$ اولی خود متغیر fileName$ هست که مثلاً میشه a یا b و... و $ دوم که پشتش نوشته شده، باعث میشه متغیری با این نام ساخته بشه (مثلاً وقتی fileName$ برابر با a هست، متغیری به اسم a$ تولید میشه). به این قابلیت در PHP، اصطلاحاً Variable Variables گفته میشه.