PHP Değişken sorun!

4 Cevap php

Yani değeri olsun Başka bir PHP dosyası değiştirilir olan bir PHP değişkeni var. Örnek:

$var = "~~~OtherVariable~~~";

Ben bu değişken echo, eğer uygun dize yazdırır. Örnek:

echo $var; //prints out "This is a string of text";

Her şey bugüne kadar çalışıyor gibi Öyle görünüyor, benim PHP değişken ($var) aslında dize içerdiğini göstermektedir "This is a string of text" olup "~~~OtherVariable~~~".

Şimdi burada sorun geliyor, I [(1)] {olması nerede (aynı sayfada), ben değişkenleri ($var) istediğiniz başka sahip başka bir PHP fonksiyonu değeri, bu PHP değişkeni kullanmak istiyorum }, ancak bunun yerine fonksiyon ne istiyorum, hangi değil "~~~OtherVariable~~~" olarak okuyor!

Fonksiyon "This is a string of text" yerine olarak değişken okuma yapmak için bir yolu var mı "~~~OtherVariable~~~"?

Teşekkür Guys & Gals

EDIT: İşte kodun bir yığın:

$string = "~~~ItemTitle~~~"; /*Another php file looks for any string in 
this file with "~~~ItemTitle~~~" and replaces it with another block of 
text, ie. "This is a string of text, http://www.google.ca" */

//Then I have a little function to look for any links inside of a string of text
function do_reg($text, $regex)
{
   preg_match_all($regex, $text, $result, PREG_PATTERN_ORDER);
   return $result[0];
}

$regex = '\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]';

$regex = '$'.$regex.'$i';

$A =do_reg($string, $regex); /* This is where I tell it what string I want 
it to look into for any URL's */
foreach($A as $B)
{
   echo "$B<BR>"; //Prints out just the URL
}

Ben söylediğimde Ama çok bu "~~~ItemTitle~~~" ve metin dizesi o kadar yerini alır değil gibi okur $string değişken bakın.

4 Cevap

Eğer bir değişken kapsam belirleme sorunu yaşıyorsanız gibi geliyor.

Ne zaman include bir dosyayı, ikinci dosyadan kodu include deyimi in bulunduğu kodu olarak aynı kapsamda çalışır

Aşağıdaki kodu göz önünde bulundurun:

first.php

<?php
$var = 'Apples';
include('second.php');

echo ' and ', $var;

second.php

<?php
$var = 'Oranges';
echo $var;

Koşu first.php çıktısı "Oranges and Oranges" daki kod olarak second.php küresel kapsamında çalıştırılır. $var kodu tarafından yazılır kez onlar aynı kapsamda aynı değişken olduğundan second.php, orijinal değerini almak için hiçbir yolu yoktur.


Şimdi aşağıdakileri dikkate alın:

third.php

<?php
function include_isolated($file) {
    include($file);
}

$var = 'Apples';
include_isolated('second.php');
echo ' and ', $var;

Koşu third.php çıktısı "Oranges and Apples" second.php daha sonra fonksiyonu kapsamında çalıştırılacak gibi include_isolated(). Bu durumda, $var ve aynı kapsamına girmeyen olarak $var iki ayrı değişkenlerdir.


Eğer küresel kapsam (third.php, kullanabilirsiniz tanımlanan itibaren değer gerekiyorsa süper global $GLOBALS gibi erişmek için:

$globalVar = $GLOBALS['var']; // $globalVar = "Apples"

Ayrıca include_isolated() function gibi $var küresel yapmak değiştirebilirsiniz:

function include_isolated($file) {
    global $var;
    include($file);
}

Gerçi Bunu yaparken, $var yeniden bir küresel kapsamı değişken olacaktır. Bu ikinci dosyada $var atama ilki değerin üzerine yapacak. Diğer değişkenler etkilenmeyecektir.


Hakkında daha fazla bilgi için variable scoping, PHP Documentation okuyunuz.

Küresel yap? Gerçekten emin değilim ne soran.

Peki, (Ben bunu doğru anlamak ediyorsam) soruyu cevaplamak için, size küresellerle kullanmanız gerekir:

global $var = 'something';

function foobar() {
   global $var;  # $var should be 'something' in this context, now
}

Ancak, globallerinin büyük programlarda anlamaya şeyler gerçekten zor yapmak. Eğer bir ihtiyaç düşünüyorsanız, size tasarım yeniden düşünmek gerekebilir. (Yani, bunlar duruma göre, muhtemelen en iyi kaçınılmalıdır konum.)

Update: Üzgünüm bu kodu doğru değilse - sen global üzerine PHP belgelerine bakın gerekebilir. Ben bir süre herhangi bir PHP yazılı değil ve benim şimdiki sistemde o yok, bu yüzden kontrol etmek zor olurdu.

Eğer bir fonksiyon içinde $ var yeniden dosyayı dahil ediyorsanız, yerel bir kapsama sahiptir - bu tanım, işlev dışındaki mevcut değil. Bazı kod yardımcı olacaktır. Ne olursa olsun bunu kullanmak istediğiniz fonksiyona değişkenin değerini iletebilirsiniz tanımlanmış nerede. İşte bir örnek:

$var = "My String.";
printItOut($var);

function printItOut($passed_value) {
   echo $passed_value; // prints "My String";
}

Değer, herhangi bir işlevin dışında tanımlanan ve eğer size bir küresel olarak başvurabilirsiniz geçirmeden olmadan erişmek istiyorsanız:

$var = "My String";

function printItOut() {
   global $var;
   echo $var; // prints "My String"
}