الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

باستدعاء ملف داخل دالة كيف أجعل متغيرات الملف عامة ؟؟

بدأه أبو محمد اللحياني في 29 أغسطس 2008 · 4 رد · 687 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

كلنا يستخدم الإجراء : require_once أو عائلته المحترمين .

ولكن لو كنت أريد إستخدامه ضمن إجراء أخر، فالمعروف أنه لا تكون متغيرات الملف عامة global .

مثلاً عند مكتبة phpCake الإجراء uses :

	function uses() {
		$args = func_get_args();
		foreach ($args as $file) {
			require_once(LIBS . strtolower($file) . '.php');
		}
	}
// الاستخدام :
	if (!class_exists('Object')) {
		 uses('object');
	}
//

وليس في ملف object.php أي تصريح لـ للكائن object ليكون global

file1.php

<?php
global $var1;
$var = 'var 1 in file 1.php';
?>

file2.php

<?php
global $var2;
$var2 = 'var 2 in file 2.php';
?>

usesfile.php

<?php
function uses($file) {
	require_once($file);
}
uses('file1.php');
echo 'uses file1<br />';
echo $var1;
echo '<br />';
echo '<br />';
echo 'uses file2<br />';
uses('file2.php');
echo $var2;
?>

النتيجة هي :

uses file1


uses file2
var 2 in file 2.php

والآن المطلوب كيف أجعل المتغيرات التي ضمن الملف المستدعى بـrequire_once متغيرات عامة أستخدمها خارج الإجراء uses مثلاً .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#2

وعليكم السلام ورحمة الله .

لم افهم تماماً المطلوب . لكن , بحسب الملف usesfile.php , تلاحظ ان نتيجه السطور :

uses('file2.php');
echo $var2;

كانت

uses file2
var 2 in file 2.php

بمعنى ان تم الوصول الى محتويات المتغير $var2 من خارج الداله uses ..

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#3

السلام عليكم ورحمة الله

أولاً أشكرك على الرد وبارك الله فيك

ثانياً حصل معي خطأ في كتابة المثال : الملف الأول file1 والمفترض يكون :

<?php
$var = 'var 1 in file 1.php';
?>

وليس المتغير $var1 مصرّح على أنها عام ، وإن كان هو عام داخل ملفه والملفات التي يتضمّن فيها .

ولكن - وهذا هو الإشكال - عندما استدعي الملف file1.php بالدالة uses لا يكون المتغير $var1 عامّاً خارج الإجراء - كما هو معروف .

كيف أجعل المتغير عاماً خارج الإجراء uses مثلاً بدون التصريح بـ global $var1; في الملف file1.php .

وفي مكتبة phpCake يستخدمون الدالة uses بكثرة ثم تكون المتغيرات المصرح عنها في تلك الملفات عامّة خارج الدالة uses كما مثلت في أول الموضوع .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#4

اولاً اخي الكريم , ليس من المنطقي ان تكون هناك إمكانية الوصول الى متغيرات خاصه في مجال داله معينه بشكل افتراضي , ولو احتجت لجعل هذه المتغيرات عامه , استخدم العباره global او مصفوفة $GLOBALS .

للمراجعة :

http://www.php.net/manual/en/language.variables.scope.php

لا إله الإ الله وحده لا شريك له الملك وله الحمد يحي ويميت وهو على كل شئ قدير

------------------------------------------------------------------------------------------------

gazabigBanner.jpg

------------------------------------------------------------------------------------------------

#5

السلام عليكم ورحمة الله وبركاته

استاذي محمد معاشر أتفق معك تماماً أنه :

اقتباس
ليس من المنطقي ان تكون هناك إمكانية الوصول الى متغيرات خاصه في مجال داله معينه بشكل افتراضي , ولو احتجت لجعل هذه المتغيرات عامه , استخدم العباره global او مصفوفة $GLOBALS .

ولكن لو كنت أريد أستخدام دالة تعطي نفس استخدام require_once لتحل محلها في كل البرنامج، لأسباب كثيرة منها توحيد شفرة البرنامج ومعالجة الأخطاء مثلاً :

function uses() {
	$args = func_get_args();
	foreach ($args as $file) {
		$file = strtolower($file) . '.php';
		if (is_file(LibFolder . $file)) 
			@require_once(LibFolder . $file);
		else
		if (is_file(AppPath . $file)) 
			@require_once(AppPath . $file);
		else debug('file Not found : ', $file);		
	}
}

وأنا لا أتحدث من خيال! ؛ لأنني وجدتها تستخدم بكثرة في مكتبة phpCake وأيضاً في delphi for php

انظروا إلى هذه الأمثلة وفسِّروا لي كيف تمّ ذلك ، حتى ننجح مثلما نجحوا :

if (!class_exists('Folder')) {
	uses('folder');
}
$Folder =& new Folder($path);
//----------------------------------------------
if (!class_exists('AclNode')) {
	uses('model' . DS . 'db_acl');
}
$model->{$type} =& ClassRegistry::init($type);;
//----------------------------------------------
if (!class_exists('cakesession')) {
	uses('session');
}
class SessionHelper extends CakeSession {
//----------------------------------------------
function flay($text, $allowHtml = false) {
	trigger_error(__('(TextHelper::flay) Deprecated: the Flay library is no longer supported and will be removed in a future version.', true), E_USER_WARNING);
	if (!class_exists('Flay')) {
		uses('flay');
	}
	return Flay::toHtml($text, false, $allowHtml);
}

وليس في مكتبة phpCake أي استخدام للتصريح global في هذه الأمثلة ولا في غيرها، ولا للمتغير $GLOBAL .

هناك أمر لا أفهمه - كالكثير في هذه اللغة - ولكن هذا أمر احتجت إليه وفشلت في تقليدهم ولا أعرف السبب .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…