• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
خواندن داده ها از یک تابع در صفحه دیگر
#1
سلام خدمت دوستان و اساتید

آقا امیدوارم این بار سوالم و یکی جواب بده SadSad

من یه کد دیدم که طرف یه کلاسی نوشته بود که داخلش با یه متد یه صفحه ای رو include میکرد بعد تو اون صفحه data هایی که تو اون متد بود رو نمایش میداد فقط نفهمیدم چجوری پاس داده به صفحه include شده ببینید این صفه کلاسش بود :

کد پی‌اچ‌پی:
    class View
    
{
        private static 
$_extention '.php';
        public static function 
render($viewpath,$data)
        {
            
$viewpath str_replace('.'DIRSEPARATOR$viewpath);
            
$path=VIEWPATH $viewpath.self::$_extention;
            if(
is_readable($path))
            {
    
                include 
$path;
            }
            else
            {
                echo 
"File Is not Exist";
            }
        }
    } 

که احتمالا از کنترلرش میگیره data و path رو حالا اینجا include میکنه اما تو صفحه خروجی اینجوری بود :
کد پی‌اچ‌پی:
<!DOCTYPE html>
<
html>
<
head>
    <
title>Index Page</title>
</
head>
<
body>
This is a Index Page Mr-Mrs <?=$data['name']?>
</body>
</html> 

که بازم احتمالا data تو کد اول یه آرایه بوده که کلید name و داره میخونه اما من نفهمیدم که منطق کارش چیه ؟ و اینکه آیا روش دیگه ای هست برای اینکه اطلاعات رو تو صفحه دیگه از یه تابع به همین شکل بگیریم ؟
اگه دوستان کسی میدونه لطفا یه توضیح کامل بده ممنون میشم.

****منظور از پاس دادن یعنی چجوری بدون echo یا Print دادن داره نمایش میده.
  پاسخ
تشکر شده توسط :
#2
ببین اصلا include کردن رو تو اینطوری فکر کن که یعنی بری کدهای اون صفحه رو بیاری این صفحه

اینو ببین
کد پی‌اچ‌پی:
<?php
$name 
'reza';
include 
'page.php'
کد پی‌اچ‌پی:
<?php

//./page.php
echo $name//reza 

کد پی‌اچ‌پی:
<?=$data['name']?>
این کد خلاصه کد
کد پی‌اچ‌پی:
<?php echo $data['name']?>
هست
  پاسخ
تشکر شده توسط : ayoubsys
#3
نقل قول:فقط نفهمیدم چجوری پاس داده به صفحه include شده ببینید این صفه کلاسش بود
پاس دادن چرا؟؟؟ تو فایل include شده کد php هست که مستقیم از $data که دریافت شده توسط تابع استفاده میکنن

امیدوارم از کد زیر منظورمو بگیری!
کد پی‌اچ‌پی:
function render($view,$data){

        
###incuded file code###
            
echo $data;
        
###end included file code###

    

نقل قول:منطق کارش چیه ؟
منطق ؟ خوب ساده ترین راه همینه دیگه برادر !

از یه طرف میگیره پشت سرش استفاده میکنه ازش!

template engine baker که خودم نوشتم هم به این صورت استفاده کنه.

کد پی‌اچ‌پی:
<?php 

class baker
{
    public static 
$data;
    public static 
$tmp;
    public static 
$Current=[];
    public static 
$ta;
    public static 
$edit=true;
    public static 
$extension='.baker.php';
    public static 
$baked_extension='.baked.php';
    public static 
$root_of_theme='';
    public static 
$root_of_baked_theme='';
    function 
baker($vals=[])
    {
        
self::$data=$vals;
    }
    function 
var_replace($data){
        
$fore='~\$([a-zA-Z0-9_]+)~';
        
$foreRe='self::$data["$1"]';

        
$datapreg_replace($fore,$foreRe$data);
        
        return 
$data;
    }

    function 
loop()
    {
        
$tmp=self::$tmp;

        
$b='<?php ';
        
$e=' ?>';
        
$fore='~@foreach\((.+)\)(\{([0-9]+)\})?~';
        
$foreRe=$b.'
        $i=0;
        foreach($1){
            if(\'$3\'!=null)
            {
                if($i==\'$3\'){
                    break;
                }
            }
            $i++;
            '
.$e;

        
$efore='~@endforeach~';
        
$eforeRe=$b.'}'.$e;
        

        
$Current='~\{\{[ ]*self::\$data\[([\[\'"a-zA-Z0-9_\]]+)\][ ]*\}\}~';
        
$CurrentRe='<?php echo self::$data[$1];?>';
        
$replace_before_exe='~\{\%[ ]*self::\$data\[([\[\'"a-zA-Z0-9_\]]+)\][ ]*\%\}~';
        
$replace_before_exeRe='<?php echo self::$data[$1];?>';

        
$b='<?php ';
        
$e=' ?>';

        
$if='~\@if\((.+)\)~';
        
$ifRe=$b.'if($1){'.$e;
        
$eif='~\@endif~';
        
$eifRe=$b.'}'.$e;
        
        
$else='~@else~';
        
$elseRe=$b.'}else{'.$e;
        
$eelse='~@endelse~';
        
$eelseRe=$b.'}'.$e;

        
$elseif='~@elseif\((.+)\)~';
        
$elseifRe='<?php }elseif($1){ ?>';
        
$eelseif='~@endelseif~';
        
$eelseifRe='<?php } ?>';

        
$section='~@section\((.+)\)~';
        
$sectionRe=$b.'self::$data[$1]=\'';
        
$esection='~@stop~';
        
$esectionRe='\';'.$e;

        
$getsection='~@GetSection\((.+)\)~';
        
$getsectionRe=$b.'echo self::$data[$1];'.$e;

        
$set='~@set\((.+)=(.+)\)~';
        
$setRe=$b.'$1=$2;'.$e;
        
$extend='~(@extend\((.+)\))~';
        
$tags='~\(\~[ ]*([a-zA-Z0-9_]+)[ ]*([a-z:;A-Z0-9_\=\-\'"]+)[ ]*\~\)~si';
        
$tagsRe='<$1 $2>';
        
$etags='~\(/([a-zA-Z0-9_]+)\)~';
        
$etagsRe='</$1>';


        
$include="~\{\~[ ]*include[ ]*([a-zA-Z0-9_\-\.]+)[ ]*\~\}~";
        for(
$i=0;$i>-1;$i++){
            if(
preg_match($include$tmp$matches)){
                
$tmp str_replace($matches[0],file_get_contents($matches[1]),$tmp);
            }else{
                break;
            }
        }

        for(
$i=0;$i>-1;$i++){
            if(
preg_match($extend$tmp$matches)){
                
$tmp str_replace($matches[0],file_get_contents($matches[2]),$tmp);
            }else{
                break;
            }
        }
        
$tmp=self::var_replace($tmp);
        
preg_match($replace_before_exe$tmp,$matches);

        for(
$i=0;$i>-1;$i++){
            if(
preg_match($replace_before_exe$tmp$matches)){
                
$tmp str_replace($matches[0],self::$data[trim($matches[1],'"')],$tmp);
            }else{
                break;
            }
        }
        
$e='~@end~';
        
$eRe='<?php } ?>';

        
$tmppreg_replace($set,$setRe$tmp);

        for(
$i=0;$i>-1;$i++){
            if(
preg_match($section$tmp$matches)){
                
$p='~'.str_replace(')','\\)',str_replace('(''\\('$matches[0])).'(.+)@stop~s';

                
preg_match($p$tmp,$m);
                
self::$data[$matches[1]]=$m[1];
                
$tmp=str_replace($m[0], ''$tmp);
                
            }else{
                break;
            }
        }
        for(
$i=0;$i>-1;$i++){
            if(
preg_match($getsection$tmp$matches)){

                
$tmp str_replace($matches[0],self::$data[$matches[1]],$tmp);
            }else{
                break;
            }
        }
        
$tmppreg_replace($tags,$tagsRe$tmp);
        
$tmppreg_replace($etags,$etagsRe$tmp);
        
$tmppreg_replace($fore,$foreRe$tmp);
        
$tmppreg_replace($efore,$eforeRe$tmp);
        
$tmppreg_replace($Current,$CurrentRe$tmp);
        
$tmppreg_replace($if,$ifRe$tmp);
        
$tmppreg_replace($eif,$eifRe$tmp);
        
$tmppreg_replace($eelseif,$eelseifRe$tmp);
        
$tmppreg_replace($elseif,$elseifRe$tmp);
        
$tmppreg_replace($else,$elseRe$tmp);
        
$tmppreg_replace($eelse,$eelseRe$tmp);
        
$tmppreg_replace($e,$eRe$tmp);

        
        
self::$tmp=$tmp;    
    }
    function 
run(){
        
ob_start ();
        eval(
self::$tmp);
    }

    function 
compile($name){
        
$file_address=self::$root_of_theme.$name.self::$extension;
        
$baked_file_addressself::$root_of_baked_theme.$name.self::$baked_extension;

        
self::$tmp='?>'.file_get_contents($file_address);
        
self::$tmp=str_replace('|>','?>',str_replace('<|''<?php'self::$tmp));
        
        
self::loop();
        
$FileName $baked_file_address;
        
$FileHandle fopen($FileName'w') or die("can't open file");
        
fclose($FileHandle);    
        
file_put_contents($FileNameself::$tmp);    

    }
    function 
view($name){
        
$file_address=self::$root_of_theme.$name.self::$extension;
        
$baked_file_addressself::$root_of_baked_theme.$name.self::$baked_extension;
        if(
self::$edit || !file_exists($baked_file_address)){
            
self::compile($name);
        }else{
            
self::$tmp=file_get_contents($baked_file_address);
        }
        
self::run();

    }    
}
include 
'baker.class.php';
baker::$data=[
            
'usercount'=>2,
            
'users'=>[
                [
'sath'=>'admin','id'=>'0','name'=>'ali','family'=>'hamidi'],
                [
'sath'=>'premium','id'=>'1','name'=>'reza','family'=>'maleki'],
                [
'sath'=>'user','id'=>'2','name'=>'mortaza','family'=>'faryabi']
            ],
        ];
baker::view($_GET['url']);
?>
  پاسخ
تشکر شده توسط :
#4
سلام ممنون از جواب هر دو ولي دمتون گرم منم ميدونم include كارش چي هست Big Grin
سوالم اينجا بود كه چرا بدون echo خوند كه جناب شيخله گفتن ساده نويسيه اما چرا تو ورژن php من كار نميكنه و سوالم اين بود كه جور ديگه ميشه نوشت همين ساده نويسي رو كه تو ورژن هاي بالاتر كار كنه ؟
ورژن php من 5.3.8 هستش که کار نمیکنه با این نوع ساده نویسی.
  پاسخ
تشکر شده توسط :
#5
سلام،
باید توی PHP.ini فعال کنین.
غایب
  پاسخ
تشکر شده توسط :
#6
(۱۳۹۵ تير ۰۹, ۰۱:۲۹ ب.ظ)Alaa نوشته: سلام،
باید توی PHP.ini فعال کنین.
کد:
short_open_tag = On
ممنون پیداش کردم ... فقط یه سوال این تو تمام host ها فعال هستش ؟؟
  پاسخ
تشکر شده توسط :
#7
معمولا فعال هست. اگرم نباشه می‌تونین بگین فعال کنن، چون مورد حساسی نیست.
خیلی‌ها میگن بهتره اصلا استفاده نشه از این روش، همون حالت عادی بنویسین بهتره، میگن اینجوری امکان داره برنامه یه جا کار کنه، یه جا کار نکنه!
خودم چون بیشتر مواقع رو سرور کار می‌کنم، از این روش استفاده می‌کنم. مشکلی هم نداشتم.
غایب
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۵ تير ۰۹, ۰۳:۱۴ ب.ظ)Alaa نوشته: معمولا فعال هست. اگرم نباشه می‌تونین بگین فعال کنن، چون مورد حساسی نیست.
خیلی‌ها میگن بهتره اصلا استفاده نشه از این روش، همون حالت عادی بنویسین بهتره، میگن اینجوری امکان داره برنامه یه جا کار کنه، یه جا کار نکنه!
خودم چون بیشتر مواقع رو سرور کار می‌کنم، از این روش استفاده می‌کنم. مشکلی هم نداشتم.
ممنون واقعا خیلی کمک شد بهم .HeartHeart
  پاسخ
تشکر شده توسط :
#9
(۱۳۹۵ تير ۰۹, ۰۷:۵۶ ب.ظ)mortaza نوشته: البته من یه جا خوندم تو ورژن 7 پی اچ پی قابلیت کوتاه نویسی برداشته شده پس بهتره برای پایدار بودن برنامه در آینده معمولی بنویسید

منم شنیده بودم، ولی در حد شایعه بود!
منبعی هست که بگه رسما حذف شده؟
غایب
  پاسخ
تشکر شده توسط :
#10
تو خود xampp 7.0.6 تست کردم کار کرد!Idea
گویا شایعه بوده واقعا !
پست قبل رو حذف کردم موجب سردرگمی کسی نشه باید تشکر از شماBig Grin
عذز ...Wink

The ASP tags <%, %>, <%=, and the script tag <script language="php"> are removed from PHP.
<% با <% اشتباه گرفته بودم
  پاسخ
تشکر شده توسط : Alaa


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان