ცვლილებები PHP-ში. PHP Php-ში ცვლილებები აჩვენებს ყველა ცვლილების პოსტს

Windows-ის სხვადასხვა დეტალები (შუაში) შეიცავს მრავალფეროვან ინფორმაციას სისტემის დაყენების და სისტემის შუაშის შესახებ. დიფერენცირებულია პროცესის, სისტემებისა და პროცესების ცვლადი დახვეწა.

Windows-ში თვალების შეცვლის ნაცვლად თვალების შეცვლის უმარტივესი გზა არის სისტემის სიმძლავრის გამოვლენა ( sysdm.cpl) -> Dodatkovo -> Zmіnnі seredovishcha.როგორც ხედავთ, ღიას აქვს ორი განყოფილება: ზედა შეიცავს ცვლადი სიმკვეთრის ნაწილებს, ხოლო ქვედა შეიცავს სისტემურ ნაწილებს.

გარდა ამისა, ცვლილებები ინახება სისტემის რეესტრში. მნიშვნელოვანი ელემენტები ინახება განყოფილებაში. სისტემა - შემოსული HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment.

თქვენ შეგიძლიათ შეიყვანოთ ყველა ცვლილების მნიშვნელობები ბრძანების ხაზიფანჯრები. ბრძანება მარტივია:

Vivede სიის გუნდი ყველაზე საზიზღარი შუაეს არის მათი მნიშვნელობა.

PowerShell-ში, ყველა ცვლილების დეტალურად საჩვენებლად, შეგიძლიათ გამოიყენოთ შემდეგი ბრძანება:

თუ საჭიროა ერთზე მეტი ცვლადის მნიშვნელობების ჩვენება, საჭიროა სწრაფად გამოიყენოთ echo ბრძანება და ცვლადი უნდა მოათავსოთ ასობით ნიშანში. Მაგალითად,

ექო %systemroot%

set > c:\tmp\env_var.txt

კონკრეტული პროცესის სხვადასხვა დახვეწა შეიძლება აღმოიფხვრას დამატებითი უფასო დახმარებით დაამუშავეთ Explorer-ის კომუნალური პროგრამები(ვიდეო Sysinternals-ის). ყველაფერი რაც თქვენ უნდა გააკეთოთ არის პროცესის გახსნა და ჩანართზე გადასვლა გარემო.

13 წლის წინ

ცოტა ხუმრობა, რომელსაც ყურადღება უნდა მიაქციოთ:

თუ აირჩევთ RegisterGlobals-ს და ურთიერთობებს, თუ იყენებთ get_defined_vars(), შეგიძლიათ დათარიღოთ წაკითხული ზუსტი საათი:

მასივი
[GLOBALS] => მასივი
[GLOBALS] => მასივი
*რეკურსია*
[_POST] => მასივი()
[_GET] => მასივი ()
[_COOKIE] => მასივი()
[_FILES] => მასივი()
)

[_POST] => მასივი()
[_GET] => მასივი ()
[_COOKIE] => მასივი()
[_FILES] => მასივი()

)
?>

გაითვალისწინეთ, რომ $_SERVER არ არის იქ. როგორც ჩანს, php ატვირთავს სუპერგლობალურ $_SERVER-ს, თუ ის სადმე გამოიყენება. თქვენ შეგიძლიათ გააკეთოთ ეს:

ბეჭდვა"

" .htmlspecialchars(print_r(get_defined_vars(), true))."
" ;
ბეჭდვა"
" .htmlspecialchars(print_r($_SERVER, true))."
" ;
?>

და შემდეგ $_SERVER გამოჩნდება ორივე სიაში. მე ვფიქრობ, რომ ეს ნამდვილად არ არის გაურკვეველი, რადგან ცუდი არაფერი მოხდება ორივე შემთხვევაში, მაგრამ მაინც საინტერესო კურიოზია.

6 წლის წინ

ვინაიდან get_defined_vars() მხოლოდ ათავსებს ცვლადებს თქვენი ფუნქციის პუნქტში, ეს არის პირდაპირი გზა ნაკადის ხაზში განსაზღვრული ვარიაციების დასაფიქსირებლად.

// თქვენი php სკრიპტის ზედა ნაწილი
$vars = get_defined_vars();

// ახლა გააკეთე შენი საქმე
$foo = "ფუ";
$bar = "ბარი";

// მიიღეთ მიმდინარე მასშტაბით განსაზღვრული ყველა ცვლადი
$vars = array_diff(get_defined_vars(), $vars);

ექო"

"
;
print_r ($vars);
ექო"
" ;
?>

15 წლის წინ

აქ არის ფუნქცია, რომელიც ქმნის გამართვის ანგარიშს ჩვენებისთვის ან ელფოსტისთვის
get_defined_vars-ის გამოყენებით. შესანიშნავია დეტალური კადრის გარეშე
მომხმარებლის შეყვანის საფუძველზე.

ფუნქცია გენერირებსDebugReport ($method, $defined_vars, $email = " განუსაზღვრელი" )(
// ელფოსტის შექმნის ან გაუქმების შესახებ ინფორმაციის შექმნის ფუნქცია.
// გამოყენება: generateDebugReport(metod,get_defined_vars(),email);
// სადაც მეთოდი არის "ბრაუზერი" და "ელ.ფოსტა".

// შექმენით "get_defined_vars" მიერ დაბრუნებული გასაღებების იგნორირების სია.
// მაგალითად, HTTP_POST_VARS, HTTP_GET_VARS და სხვა
// ზედმეტი (იგივე _POST, _GET)
// ასევე ჩართეთ ვარდები, რომელთა იგნორირება გსურთ უსაფრთხოების მიზეზების გამო - ე.ი. PHPSESSID.
$ignorelist =მასივი("HTTP_POST_VARS" , "HTTP_GET_VARS" ,
"HTTP_COOKIE_VARS" , "HTTP_SERVER_VARS" ,
"HTTP_ENV_VARS" , "HTTP_SESSION_VARS" ,
"_ENV" , "PHPSESSID" , "SESS_DBUSER" ,
"SESS_DBPASS", "HTTP_COOKIE");

$timestamp = თარიღი ("m/d/y h:m:s");
$message = "გამართვის ანგარიში შეიქმნა $timestamp \n" ;

// მიიღეთ ბოლო SQL შეცდომა კარგი საზომისთვის, სადაც $link არის რესურსის იდენტიფიკატორი
// mysql_connect-ისთვის. დაწერეთ კომენტარი ან შეცვალეთ თქვენი მონაცემთა ბაზის ან აბსტრაქციის კონფიგურაციისთვის.
გლობალური $ბმული;
$sql_error = mysql_error($link);
if ($sql_error )(
$message .= "\nMysql შეტყობინებები:\n" . mysql_error($link);
}
// MySQL-ის დასრულება

// აქ შეიძლება რეკურსიული ფუნქციის გამოყენება. გესმით იდეა ;-)
foreach($defined_vars როგორც $key => $val )(
if(is_array ($val ) && ! in_array ($key, $ignorelist) && count ($val ) > 0 )(
$message .= "\n $key მასივი (key=value):\n" ;
foreach ($val როგორც $subkey => $subval )(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$message.=$subkey. "=". $ subval. "\n";
}
elseif(! in_array ($subkey, $ignorelist) && is_array ($subval ))(
foreach ($subval როგორც $subsubkey => $subsubval )(
if(! in_array ($subsubkey, $ignorelist))(
$message .= $subsubkey . "=". $subval . "\n" ;
}
}
}
}
}
elseif(!
is_array ($val) &&! in_array ($key, $ignorelist) && $val )(
$message .= "\nცვლადი" . $ გასაღები. "=". $val. "\n";
}
}

თუ ($method == "ბრაუზერი") (
echo nl2br ($გზავნილი);
}
elseif($method == "ელფოსტა" )(
if($email == "დაუზუსტებელი" )(
$email = $_SERVER["SERVER_ADMIN"];
}

$mresult = ფოსტა ($email, "გამართვის ანგარიში" . $_ENV [ "HOSTNAME" ]. "" , $message );
if($mresult == 1 )(
ექო "გამართვის ანგარიში წარმატებულია.\n";
}
სხვა (
ექო "გამართვის ანგარიშის გაგზავნა ვერ მოხერხდა.\n";
}
}
}
?>

17 წლის წინ

მარტივი რუტინა get_defined_vars ობიექტის XML-ად გადაქცევისთვის.

ფუნქცია obj2xml ($v, $indent = "") (
while (list($key, $val) = თითოეული ($v)) (
თუ ($key == "__attr") გაგრძელდება;
// შეამოწმეთ __attr
თუ (is_object ($val -> __attr )) (
while (list($key2, $val2) = თითოეული ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "";
თუ (ის_მასივი ($val) || არის_ობიექტი ($val)) (
print(" $indent< $key$attr >\n");
obj2xml($val, $indent. "");
print(" $indent\n");
}
else print(" $indent< $key$attr >$val\n");
}
}

//მაგალითი ობიექტი
$x -> სახელი -> პირველი = "ჯონ";
$x -> სახელი -> ბოლო = "სმიტი";
$x -> arr [ "Fruit" ] = "ბანანი" ;
$x -> arr ["Veg"] = "სტაფილო";
$y -> კლიენტი = $x;
$y -> კლიენტი -> __attr -> id = "176C4";

$z = get_defined_vars();
obj2xml($z["y"]);
?>
გამოვა:


იოანე
სმიტი


ბანანი
სტაფილო

11 წლის წინ

როგორც შენიშვნა, get_defined_vars() არ აბრუნებს ცვლადის მითითებების ერთობლიობას (როგორც ვიმედოვნებდი). Მაგალითად:

// ცვლადის განსაზღვრა
$my_var = "ფუ";

// მიიღეთ ჩვენი განსაზღვრული ცვლადების სია
$defined_vars = get_defined_vars();

// ახლა შეეცადეთ შეცვალოთ მნიშვნელობა დაბრუნებული მასივის მეშვეობით
$defined_vars["my_var"] = "ზოლი";

echo $my_var, "\n";

?>

გამოვა "foo" (ორიგინალური მნიშვნელობა). კარგი იქნება, თუ get_defined_vars() მის ინფორმირებისთვის შესაძლო არგუმენტს შეიცავს, თორემ შეიძლება განსაკუთრებული სახით დამჭირდეს.

$defined_vars = მასივი();
$var_names = array_keys(get_defined_vars());

foreach ($var_names როგორც $var_name)
{
$defined_vars [ $var_name ] =& $var_name ;
}

?>

1 მოსწონს ეს

მე დავდე її „რას“ წინ, რომელიც არის get_defined_vars-ში.

ყოველგვარი გამოხტომების გარეშე არ ჩნდება, მაგრამ ასეთ გამოხტომებში დიდი ალბათობით გამოჩნდება.

Php-r"
კლასის ტესტი (
საჯარო ფუნქცია a() (var_dump(array_keys(get_defined_vars())));$a = 123;)
საჯარო ფუნქცია b() (var_dump(array_keys(get_defined_vars())));$this;)
}
$t = ახალი ტესტი();
$t->a();
$t->b();
"

მასივი ()
მასივი ("ეს")

ეს არ არის PHP 7.2, არამედ PHP 5.6.

1 მოსწონს ეს

არის რამდენიმე კომენტარი, რომელიც ხედავთ, რომ ეს ფუნქცია არ დააბრუნებს მითითებებს. ეს ნიშნავს, რომ დაბრუნების სახელები და სახელები არის "ცნობები".

მე ვერ მოგაწოდებთ ინფორმაციას მათ შესახებ, რომლებიც უნდა გაიგზავნოს.

საჯარო ფუნქცია x($a, $b, $c) (
foreach(მასივის_გასაღები(get_defined_vars()) როგორც $key)
if ($key !== "ეს")
$this->y($($key));
}

საჯარო ფუნქცია y(&$input) (
$input++;
}

$()-ის ნაცვლად, ასევე შეგიძლიათ $$-ის ვიკორიზაცია.

თავის დროზე მე გავაკეთე რაღაც უაზრო, რომ შემექმნა უკიდურესად ზოგადი კოდი, მაგრამ არასდროს მქონია მსგავსი რამის გაკეთება.

თქვენ შეგიძლიათ იგივე გააკეთოთ $$key++-ით, მაგრამ მე არასოდეს მინახავს ისეთი კოდი, რომელიც საშინლად ცუდი არ იყო (დინამიკის გამოყენება, სადაც დინამიური არ არის მომგებიანი).

როგორც თქვენ შეგიძლიათ გამოიცნოთ მათ შესახებ, რომლებიც არ არის ბუნებრივი, არა დამატებითი გადახვევები.

13 წლის წინ

ცოტა ხუმრობა, რომელსაც ყურადღება უნდა მიაქციოთ:

თუ აირჩევთ RegisterGlobals-ს და ურთიერთობებს, თუ იყენებთ get_defined_vars(), შეგიძლიათ დათარიღოთ წაკითხული ზუსტი საათი:

მასივი
[GLOBALS] => მასივი
[GLOBALS] => მასივი
*რეკურსია*
[_POST] => მასივი()
[_GET] => მასივი ()
[_COOKIE] => მასივი()
[_FILES] => მასივი()
)

[_POST] => მასივი()
[_GET] => მასივი ()
[_COOKIE] => მასივი()
[_FILES] => მასივი()

)
?>

გაითვალისწინეთ, რომ $_SERVER არ არის იქ. როგორც ჩანს, php ატვირთავს სუპერგლობალურ $_SERVER-ს, თუ ის სადმე გამოიყენება. თქვენ შეგიძლიათ გააკეთოთ ეს:

ბეჭდვა"

" .htmlspecialchars(print_r(get_defined_vars(), true))."
" ;
ბეჭდვა"
" .htmlspecialchars(print_r($_SERVER, true))."
" ;
?>

და შემდეგ $_SERVER გამოჩნდება ორივე სიაში. მე ვფიქრობ, რომ ეს ნამდვილად არ არის გაურკვეველი, რადგან ცუდი არაფერი მოხდება ორივე შემთხვევაში, მაგრამ მაინც საინტერესო კურიოზია.

6 წლის წინ

ვინაიდან get_defined_vars() მხოლოდ ათავსებს ცვლადებს თქვენი ფუნქციის პუნქტში, ეს არის პირდაპირი გზა ნაკადის ხაზში განსაზღვრული ვარიაციების დასაფიქსირებლად.

// თქვენი php სკრიპტის ზედა ნაწილი
$vars = get_defined_vars();

// ახლა გააკეთე შენი საქმე
$foo = "ფუ";
$bar = "ბარი";

// მიიღეთ მიმდინარე მასშტაბით განსაზღვრული ყველა ცვლადი
$vars = array_diff(get_defined_vars(), $vars);

ექო"

"
;
print_r ($vars);
ექო"
" ;
?>

15 წლის წინ

აქ არის ფუნქცია, რომელიც ქმნის გამართვის ანგარიშს ჩვენებისთვის ან ელფოსტისთვის
get_defined_vars-ის გამოყენებით. შესანიშნავია დეტალური კადრის გარეშე
მომხმარებლის შეყვანის საფუძველზე.

ფუნქცია გენერირებსDebugReport ($method, $defined_vars, $email = " განუსაზღვრელი" )(
// ელფოსტის შექმნის ან გაუქმების შესახებ ინფორმაციის შექმნის ფუნქცია.
// გამოყენება: generateDebugReport(metod,get_defined_vars(),email);
// სადაც მეთოდი არის "ბრაუზერი" და "ელ.ფოსტა".

// შექმენით "get_defined_vars" მიერ დაბრუნებული გასაღებების იგნორირების სია.
// მაგალითად, HTTP_POST_VARS, HTTP_GET_VARS და სხვა
// ზედმეტი (იგივე _POST, _GET)
// ასევე ჩართეთ ვარდები, რომელთა იგნორირება გსურთ უსაფრთხოების მიზეზების გამო - ე.ი. PHPSESSID.
$ignorelist =მასივი("HTTP_POST_VARS" , "HTTP_GET_VARS" ,
"HTTP_COOKIE_VARS" , "HTTP_SERVER_VARS" ,
"HTTP_ENV_VARS" , "HTTP_SESSION_VARS" ,
"_ENV" , "PHPSESSID" , "SESS_DBUSER" ,
"SESS_DBPASS", "HTTP_COOKIE");

$timestamp = თარიღი ("m/d/y h:m:s");
$message = "გამართვის ანგარიში შეიქმნა $timestamp \n" ;

// მიიღეთ ბოლო SQL შეცდომა კარგი საზომისთვის, სადაც $link არის რესურსის იდენტიფიკატორი
// mysql_connect-ისთვის. დაწერეთ კომენტარი ან შეცვალეთ თქვენი მონაცემთა ბაზის ან აბსტრაქციის კონფიგურაციისთვის.
გლობალური $ბმული;
$sql_error = mysql_error($link);
if ($sql_error )(
$message .= "\nMysql შეტყობინებები:\n" . mysql_error($link);
}
// MySQL-ის დასრულება

// აქ შეიძლება რეკურსიული ფუნქციის გამოყენება. გესმით იდეა ;-)
foreach($defined_vars როგორც $key => $val )(
if(is_array ($val ) && ! in_array ($key, $ignorelist) && count ($val ) > 0 )(
$message .= "\n $key მასივი (key=value):\n" ;
foreach ($val როგორც $subkey => $subval )(
if(! in_array ($subkey , $ignorelist ) && ! is_array ($subval ))(
$message.=$subkey. "=". $ subval. "\n";
}
elseif(! in_array ($subkey, $ignorelist) && is_array ($subval ))(
foreach ($subval როგორც $subsubkey => $subsubval )(
if(! in_array ($subsubkey, $ignorelist))(
$message .= $subsubkey . "=". $subval . "\n" ;
}
}
}
}
}
elseif(!
is_array ($val) &&! in_array ($key, $ignorelist) && $val )(
$message .= "\nცვლადი" . $ გასაღები. "=". $val. "\n";
}
}

თუ ($method == "ბრაუზერი") (
echo nl2br ($გზავნილი);
}
elseif($method == "ელფოსტა" )(
if($email == "დაუზუსტებელი" )(
$email = $_SERVER["SERVER_ADMIN"];
}

$mresult = ფოსტა ($email, "გამართვის ანგარიში" . $_ENV [ "HOSTNAME" ]. "" , $message );
if($mresult == 1 )(
ექო "გამართვის ანგარიში წარმატებულია.\n";
}
სხვა (
ექო "გამართვის ანგარიშის გაგზავნა ვერ მოხერხდა.\n";
}
}
}
?>

17 წლის წინ

მარტივი რუტინა get_defined_vars ობიექტის XML-ად გადაქცევისთვის.

ფუნქცია obj2xml ($v, $indent = "") (
while (list($key, $val) = თითოეული ($v)) (
თუ ($key == "__attr") გაგრძელდება;
// შეამოწმეთ __attr
თუ (is_object ($val -> __attr )) (
while (list($key2, $val2) = თითოეული ($val -> __attr )) (
$attr .= " $key2 =\" $val2 \"" ;
}
}
else $attr = "";
თუ (ის_მასივი ($val) || არის_ობიექტი ($val)) (
print(" $indent< $key$attr >\n");
obj2xml($val, $indent. "");
print(" $indent\n");
}
else print(" $indent< $key$attr >$val\n");
}
}

//მაგალითი ობიექტი
$x -> სახელი -> პირველი = "ჯონ";
$x -> სახელი -> ბოლო = "სმიტი";
$x -> arr [ "Fruit" ] = "ბანანი" ;
$x -> arr ["Veg"] = "სტაფილო";
$y -> კლიენტი = $x;
$y -> კლიენტი -> __attr -> id = "176C4";

$z = get_defined_vars();
obj2xml($z["y"]);
?>
გამოვა:


იოანე
სმიტი


ბანანი
სტაფილო

11 წლის წინ

როგორც შენიშვნა, get_defined_vars() არ აბრუნებს ცვლადის მითითებების ერთობლიობას (როგორც ვიმედოვნებდი). Მაგალითად:

// ცვლადის განსაზღვრა
$my_var = "ფუ";

// მიიღეთ ჩვენი განსაზღვრული ცვლადების სია
$defined_vars = get_defined_vars();

// ახლა შეეცადეთ შეცვალოთ მნიშვნელობა დაბრუნებული მასივის მეშვეობით
$defined_vars["my_var"] = "ზოლი";

echo $my_var, "\n";

?>

გამოვა "foo" (ორიგინალური მნიშვნელობა). კარგი იქნება, თუ get_defined_vars() მის ინფორმირებისთვის შესაძლო არგუმენტს შეიცავს, თორემ შეიძლება განსაკუთრებული სახით დამჭირდეს.

$defined_vars = მასივი();
$var_names = array_keys(get_defined_vars());

foreach ($var_names როგორც $var_name)
{
$defined_vars [ $var_name ] =& $var_name ;
}

?>

1 მოსწონს ეს

მე დავდე її „რას“ წინ, რომელიც არის get_defined_vars-ში.

ყოველგვარი გამოხტომების გარეშე არ ჩნდება, მაგრამ ასეთ გამოხტომებში დიდი ალბათობით გამოჩნდება.

Php-r"
კლასის ტესტი (
საჯარო ფუნქცია a() (var_dump(array_keys(get_defined_vars())));$a = 123;)
საჯარო ფუნქცია b() (var_dump(array_keys(get_defined_vars())));$this;)
}
$t = ახალი ტესტი();
$t->a();
$t->b();
"

მასივი ()
მასივი ("ეს")

ეს არ არის PHP 7.2, არამედ PHP 5.6.

1 მოსწონს ეს

არის რამდენიმე კომენტარი, რომელიც ხედავთ, რომ ეს ფუნქცია არ დააბრუნებს მითითებებს. ეს ნიშნავს, რომ დაბრუნების სახელები და სახელები არის "ცნობები".

მე ვერ მოგაწოდებთ ინფორმაციას მათ შესახებ, რომლებიც უნდა გაიგზავნოს.

საჯარო ფუნქცია x($a, $b, $c) (
foreach(მასივის_გასაღები(get_defined_vars()) როგორც $key)
if ($key !== "ეს")
$this->y($($key));
}

საჯარო ფუნქცია y(&$input) (
$input++;
}

$()-ის ნაცვლად, ასევე შეგიძლიათ $$-ის ვიკორიზაცია.

თავის დროზე მე გავაკეთე რაღაც უაზრო, რომ შემექმნა უკიდურესად ზოგადი კოდი, მაგრამ არასდროს მქონია მსგავსი რამის გაკეთება.

თქვენ შეგიძლიათ იგივე გააკეთოთ $$key++-ით, მაგრამ მე არასოდეს მინახავს ისეთი კოდი, რომელიც საშინლად ცუდი არ იყო (დინამიკის გამოყენება, სადაც დინამიური არ არის მომგებიანი).

როგორც თქვენ შეგიძლიათ გამოიცნოთ მათ შესახებ, რომლებიც არ არის ბუნებრივი, არა დამატებითი გადახვევები.

ისევე, როგორც, სახლში გაქვთ გარდერობი ან კომოდი. ამ ძიების პრინციპი მარტივია: იქ ვაგროვებთ გამოსვლებს, რომლებიც დაუყოვნებლივ არ გვჭირდება, მაგრამ შეიძლება დაგჭირდეთ კიდევ ერთ საათში.

უბრალოდ ასეა. შეგიძლიათ მათთან მოათავსოთ ნებისმიერი მნიშვნელოვანი ნივთი და შეინახოთ იქ, სანამ დაგჭირდებათ.

წარჩინებულთა შექმნა

თქვენ შეგიძლიათ დააყენოთ ცვლილების მნიშვნელობა ასე:

კოდისთვის შევქმენით ცვლადი $name და მასში ჩავსვით მნიშვნელობები Ivan, შემდეგ შევქმენით ცვლადი $age და მივეცით მნიშვნელობა 20.

სახელი "ცვალებადი" ნიშნავს, რომ ეს მნიშვნელობები შეიძლება შეიცვალოს სკრიპტის დაწერისას:

ზოგიერთ ენაში აუცილებელია პირველი სიტყვის „ხმა“ და შემდეგ გამოთქმა. PHP-ში არ არის დაბნეულობა - ცვლილება იქმნება იმ მომენტში, როცა მასში მნიშვნელობებს აყენებთ.
არანაკლებ, PHP პროგრამები ხშირად როგორც ჩანს, „აოცებენ ცვლილებას“ ნაცვლად „ცვლის შექმნის“.

გარდა ამისა, იმის ნაცვლად, რომ „ჩანთაში ღირებულების დაყენება“, ხშირად გვეჩვენება „მნიშვნელობის დადება“.
მიზეზი მარტივია - სიმბოლო =, რომელიც ყოველთვის ინახავს მნიშვნელობებს, ეწოდება "დავალების ოპერატორი". გამოიყენეთ ტერმინი "მივანიჭოთ".

სახელების დასახელების წესები

1. ბირჟის სახელი იწყება $ სიმბოლოთი.

2. სხვა სიმბოლო შეიძლება იყოს ასო ან სიმბოლო _

დაასახელეთ ცვლილებები რეესტრში. $name და $Name განსხვავებულია.

აჩვენებს ცვლილების მნიშვნელობას ეკრანზე

თქვენ შეგიძლიათ აჩვენოთ ცვლილება ჩვენთვის უკვე ცნობილი echo ბრძანების გამოყენებით:

echo ბრძანება საშუალებას გაძლევთ აჩვენოთ ერთი მნიშვნელობა ეკრანზე:

გთხოვთ გაითვალისწინოთ, რომ ჩვენ გადავიტანეთ 2 მნიშვნელობა ექოზე, დავყავით ისინი ერთზე. ასე რომ, ჩვენ შეგვიძლია გადავიტანოთ რამდენი ღირებულება ყოველწლიურად. ნაბიჯი ორი კონდახით იგივე შედეგის მისაღებად:

PHP-ს ასევე აქვს მალსახმობების სინტაქსი ცვლილებების საჩვენებლად. ზამისტი

PHP 5.4-მდე მალსახმობების სინტაქსი დამუშავებული იყო მხოლოდ მაშინ, როდესაც short_open_tag დირექტივა ჩართული იყო PHP კონფიგურაციებში, რაც ასევე საშუალებას იძლევა შეიცვალოს სტენოგრაფიული ტეგი, რომელიც იხსნება.

შეცვლის მნიშვნელობის შემოწმება

echo ბრძანება ყოველთვის გამოსადეგია ცვლადის მიმდინარე მნიშვნელობის შესამოწმებლად. მაგალითად, როდესაც ცდილობთ ცარიელი მწკრივის "" ჩვენებას ეკრანზე არაფერი გამოჩნდება. და გაუგებარია, რატომ არის მიზეზი ცარიელი ცვალებადი ან არაფუნქციონირებადი კოდი.

ამიტომ, ცვლადის მნიშვნელობის შესამოწმებლად, გამოიყენება var_dump() ფუნქცია:

vikonanny სკრიპტის შედეგი:

სტრიქონი (5) "ვასია" სტრიქონი (0) ""

მოგეხსენებათ, PHP გამოიყენება არა მხოლოდ ცვლადის ნაცვლად, არამედ ცვლადის ტიპის (სტრიქონი - მწკრივი) აღსანიშნავად სიმბოლოების რაოდენობა. ჩვენ განვიხილავთ ამ ტიპის მონაცემებს მომავალ გაკვეთილებში.

ცნობილი ხედები

თქვენ შეგიძლიათ წაშალოთ ცვლილება დამატებითი unset() ფუნქციის გამოყენებით:

ახლა კი დროა ვივარჯიშოთ ცოტა.

გახსოვდეთ, რომ პრაქტიკულად, თუ თქვენ მუშაობთ PHP-ზე, შეგიძლიათ მიიღოთ რამდენიმე გადაწყვეტილება. მხოლოდ იმიტომ, რომ თქვენი გადაწყვეტილებები განსხვავდება ამ საიტზე დაწერილისგან, არ ნიშნავს, რომ თქვენ ეს არასწორად გააკეთეთ.

დაწერეთ ასეთი სკრიპტი:
1. ცვლის სახელების სათაურსა და შინაარსს და ნებისმიერ სხვა მნიშვნელობას.
2. აჩვენეთ სათაურის მნიშვნელობები h1 ტეგის შუაში, ხოლო შინაარსის მნიშვნელობები div ტეგის შუაში.

გადაწყვეტილების ჩვენება

", $title, ""; ექო"

", $content,"
"; ?>

კიდევ ერთხელ მინდა გამოვხატო თქვენი პატივისცემა, რომ ეს გადაწყვეტილება მთლად სიმართლეს არ შეესაბამება. მაგალითად, შეურაცხმყოფელმა კოდმა გამოიწვია შემდეგი შედეგი:

ეს გაკვეთილი აჩვენებს PHP ცვლილებების ხილვადობის არეალს. ახსნილია ლოკალური და გლობალური მასშტაბის მნიშვნელობა, ნაჩვენებია როგორ უარვყოთ წვდომა გლობალურ ცვლილებებზე ფუნქციის შუაში, როგორ ვიმუშაოთ სუპერგლობალებთან და შევქმნათ სტატიკური ცვლილებები.

როდესაც დაიწყებთ PHP-ს და დაიწყებთ მუშაობას ფუნქციებთან და ობიექტებთან, ცვლილებების ხილვადობის არე შეიცვლება. საბედნიეროდ, PHP-ის წესები ძალიან მარტივი გასაგებია (სხვა პროგრამირების ენების მსგავსად).

რა არის ფარგლები?

ცვლილებების ხილვადობის ზონა არის კონტექსტი, რომელშიც ცვლილება იქნა მინიჭებული და სადაც მასზე წვდომის უარყოფა შეიძლება. PHP-ს აქვს ორი ხილვადობის სფერო:

  • გლობალური- სანამ ცვლილებები არ შეგეძლებათ უარყოთ წვდომა ნებისმიერ სკრიპტზე
  • ადგილობრივი- ცვლილებების შეტანამდე შეგიძლიათ გააუქმოთ წვდომა მხოლოდ არჩეულ ფუნქციებზე

ხილვადობის ფარგლები ცვალებადია და განსაკუთრებით ლოკალურია, რაც ძალიან აადვილებს კოდის მართვას. თუ ყველა ცვლილება გლობალური იყო, მათი შეცვლა შეიძლებოდა ნებისმიერი სკრიპტით. ეს გამოიწვევს ქაოსს და დიდ სცენარებს, ფრაგმენტებს და ხშირად სცენარის სხვადასხვა ნაწილს ერთი და იგივე სახელებით ცვლის. ფარგლების ლოკალურ კონტექსტთან ურთიერთდაკავშირებით, თქვენ განსაზღვრავთ კოდს, რომელსაც შეუძლია უარი თქვას ცვლილებაზე წვდომაზე, რაც გახდის კოდს უფრო მძლავრ, მოდულურ და უფრო ადვილად დასანერგად.

ზმინნი ს გლობალური ტერიტორიახილვადობას გლობალური ეწოდება, ხოლო ხილვადობის ლოკალურ ფარგლებს – ლოკალურს.

მთავარი ისაა, თუ როგორ მუშაობს გლობალური და ლოკალური ცვლილებები.

"; ) sayHello(); echo "\$globalName-ის მნიშვნელობები: "$globalName"
"; echo "\$localName მნიშვნელობა: "$localName"
"; ?>

გამარჯობა ჰარი! $globalName ღირებულება: "Zoe" $localName ღირებულება: ""

რომლის სკრიპტში ჩვენ შევიტანეთ ორი ცვლილება:

  • $globalName-ცე გლობალურიზმინა
  • $localName-ცე ადგილობრივიცვლილება ხდება sayHello() ფუნქციის შუაში.

ცვლილების ფუნქციის შექმნის შემდეგ, სკრიპტი იძახებს sayHello(), რომელიც აჩვენებს "Hello, Harry!" . შემდეგ სკრიპტი ცდილობს აჩვენოს ორი ცვლადის მნიშვნელობები ექო ფუნქციის გამოყენებით. ღერძი, რომელიც მოსალოდნელია:

  • ასე რომ იაკ $globalNameფუნქციის მიერ პოზიციის შექმნის შემდეგ, ის ხელმისაწვდომია სკრიპტის ნებისმიერ ადგილას და გამოჩნდება "Zoya".
  • $localNameხელმისაწვდომი იქნება მხოლოდ sayHello() ფუნქციის შუაში. ვინაიდან echo არის ფუნქცია, PHP არ იძლევა ადგილობრივ ცვლადზე წვდომას. სინამდვილეში, PHP ამბობს, რომ კოდი შექმნის ახალ ცვლილებას $localName-ში, რომელიც წაშლის მნიშვნელობას წინა მწკრივიდან - ცარიელი მწკრივი. ღერძი რატომ სხვა ვიკი ექო აჩვენებს მნიშვნელობას "" ცვლილებისთვის $ localName .

გლობალურ ფუნქციებზე წვდომა

გლობალურ ბირჟაზე წვდომის მისაღებად პოზის ფუნქციაუბრალოდ დაწერეთ მათი სახელი. Ale გლობალურ ბირჟაზე წვდომის მისაღებად ფუნქციის შუაში, თქვენ ჯერ უნდა გაახმოვანოთ ცვლილება, როგორც გლობალური ფუნქცია გლობალური საკვანძო სიტყვის გამოყენებით:

ფუნქცია myFunction() ( გლობალური $globalVariable; // გლობალური ცვლადის წვდომა $globalVariable )

თუ ვერაფერს შექმნით, მაშინ PHP გადასცემს იმას, რასაც შექმნით ან ქმნის ლოკალურ ცვლილებას.

სკრიპტის ღერძი, რომელიც არის გლობალური ცვლილება ფუნქციის შუაში:

"; გლობალური $globalName; echo "გამარჯობა, $globalName!
";) sayHello(); ?>

როდესაც შედიხართ სკრიპტს Vikonanny-დან:

გამარჯობა ჰარი! გამარჯობა ზოია!

ფუნქცია sayHello() არის vikoryst საკვანძო სიტყვაგლობალური $globalName გლობალურად შესაცვლელად. რის შემდეგაც შეგიძლიათ უარყოთ ცვლილებაზე წვდომა და შეიყვანოთ მისი მნიშვნელობები ("ზოია").

რა არის სუპერგლობალი?

PHP იყენებს გლობალური მასივების სპეციალურ კომპლექტს სხვადასხვა ინფორმაციის მოსათავსებლად. ასეთ მასივებს ე.წ სუპერგლობალები,იმის გამო, რომ ისინი ხელმისაწვდომია ნებისმიერი სკრიპტის მდებარეობიდან, მათ შორის ფუნქციის შიდა სივრციდან და არ არის საჭირო მათი დაკონკრეტება გლობალური საკვანძო სიტყვის გამოყენებით.

ეს არის სუპერგლობალთა სია, რომლებიც ხელმისაწვდომია PHP 5.3 ვერსიაში:

  • $GLOBALS - სკრიპტის ყველა გლობალური ცვლილების სია (სუპერგლობალის გარდა)
  • $_GET - აერთიანებს ბრაუზერის მიერ გაგზავნილი ფორმის ყველა ველს დამატებითი GET ბრძანებით
  • $_POST - ჩამოთვალეთ ბრაუზერის მიერ გაგზავნილი ფორმის ყველა ველი დამატებითი მოთხოვნისთვის POST
  • $_COOKIE - ჩამოთვალეთ ბრაუზერის მიერ გაგზავნილი ყველა ქუქი
  • $_REQUEST - ჩამოთვალეთ ყველა უნიკალური გასაღები/მნიშვნელობა, რომელიც შეიცავს $_GET, $_POST, $_COOKIE მასივებს
  • $_FILES - ჩამოთვალეთ ბრაუზერის მიერ წვდომის ყველა ფაილი
  • $_SESSION - საშუალებას გაძლევთ შეინახოთ და მიიღოთ ცვალებად სესიები ნაკადის ბრაუზერისთვის
  • $_SERVER - ინახავს ინფორმაციას სერვერის შესახებ, როგორიცაა კომპილირებული სკრიპტის ფაილი და ბრაუზერის IP მისამართი.
  • $_ENV - ამოიღონ ცვლილებების გავლენა, რომლებიც გადაცემულია PHP-ით, მაგალითად, CGI ცვლილებებით.
მაგალითად, შეგიძლიათ გამოიყენოთ $_GET, რათა ამოიღოთ მნიშვნელოვანი ცვლილებები სკრიპტის URL-ების სერიიდან და აჩვენოთ ისინი გვერდზე:

თუ თქვენ გაუშვით სამიზნე სკრიპტი URL-ის უკან http://www.example.com/script.php?yourName=Fred, ნახავთ:

გამარჯობა ფრედი!

Მოემზადე!რეალურ სკრიპტში შეუძლებელია ასეთი მონაცემთა გადაცემის ვიკორიზაცია სუსტი უსაფრთხოების საშუალებით. ამიერიდან აუცილებელია მონაცემთა გადამოწმება და გაფილტვრა.

$GLOBALS სუპერგლობალი მარტივი გამოსაყენებელია, რადგან ის საშუალებას გაძლევთ მიიღოთ გლობალური ფუნქციები გლობალური საკვანძო სიტყვის გამოყენების გარეშე. Მაგალითად:

"; ) sayHello(); // ამობეჭდეთ "გამარჯობა, ზოია!" ?>

სტატიკური ცვლილებები: აქ სუნი დგას

თუ თქვენ შექმნით ლოკალურ ცვლილებას ფუნქციის შუაში, ეს არის ის, რასაც ფუნქცია აკეთებს. ფუნქციის დასრულების შემდეგ ცნობილია ადგილობრივი ცვლილება. როდესაც ფუნქცია კვლავ გამოჩნდება, იქმნება ახალი ადგილობრივი ცვლილება.

ყველაზე ხშირად ის კარგად მუშაობს. ამრიგად, ფუნქციები თვითკმარია და მოქმედებენ ყოველთვის კანის დონეზე.

თუმცა, არის სიტუაციები, როდესაც საჭირო იქნება ხელით შექმნათ ადგილობრივი ცვლილება, რომელშიც ის „იმახსოვრებს“ მის მნიშვნელობას ფუნქციის გამოძახებებს შორის. ასეთ ცვლილებას სტატიკური ეწოდება.

სტატიკური ცვლადის ფუნქციის შესაქმნელად, თქვენ უნდა გამოიყენოთ სტატიკური საკვანძო სიტყვა ცვლადის ფუნქციამდე და უბრალოდ მიუთითოთ მისი cob მნიშვნელობა. Მაგალითად:

ფუნქცია myFunction() ( სტატიკური $myVariable = 0; )

მოდით შევხედოთ სიტუაციას, თუ ჩვენ შეგვიძლია ადვილად ამოიღოთ სტატიკური ცვლილება. შესაძლებელია, რომ შექმნათ ფუნქცია, რომელზეც დაწკაპუნებით იქმნება ვიჯეტი და აჩვენებს უკვე შექმნილი ვიჯეტების რაოდენობას. შეგიძლიათ სცადოთ ასეთი კოდის დაწერა ადგილობრივი ცვლილების ვიკიდან:


"; echo createWidget() . " ჩვენ უკვე შევქმენით.
"; echo createWidget() . " ჩვენ უკვე შევქმენით.>
"; ?>

გამარჯობა, $numWidgets ცვლილების ფრაგმენტები იქმნება ფუნქციის გამოძახებისთანავე და მიმდინარე შედეგი უქმდება:

ჩვენ ვქმნით ვიჯეტებს... 1 უკვე შეიქმნა. ჩვენ უკვე გავაკეთეთ 1. ჩვენ უკვე გავაკეთეთ 1.

ალტერნატიულად, სტატიკური ცვლადის გამოყენებით, ჩვენ შეგვიძლია შევინახოთ მნიშვნელობები ერთი ფუნქციის გამოძახებიდან მეორეზე:

"; echo createWidget() . " ჩვენ უკვე შევქმენით.
"; echo createWidget() . " ჩვენ უკვე შევქმენით.
"; echo createWidget() . " >ჩვენ უკვე შევქმენით.
"; ?>

ახლა სკრიპტი აჩვენებს შედეგს:

ჩვენ ვქმნით ვიჯეტებს... 1 უკვე შეიქმნა. ჩვენ უკვე გავაკეთეთ 2. 3 უკვე გაკეთებულია.

მიუხედავად იმისა, რომ სტატიკური ცვლილება ინახავს მნიშვნელობებს ფუნქციის ზარებს შორის, ის არ მუშაობს სკრიპტის შეწყვეტის მომენტში. როგორც კი სკრიპტი ასრულებს შესრულებას, ყველა სტატიკური ცვლილება წაიშლება, როგორც ლოკალური, ასევე გლობალური ცვლილებები.

Სულ ეს არის! ყველაზე ხშირად შეამოწმეთ PHP დოკუმენტაცია.