Php işaretçiler var mı?

7 Cevap php

Bu kod ne anlama geliyor? Bu php bir işaretçi bildirmek nasıl?

$this->entryId = $entryId;

7 Cevap

Variable names in PHP start with $ so $entryId is the name of a variable. $this is a special variable in Object Oriented programming in PHP, which is reference to current object. -> is used to access an object member (like properties or methods) in PHP, like the syntax in C++. so your code means this:

Bu nesnenin entryid alan (veya özellik) içine değişken $ entryid değerini yerleştirin.

& PHP operatörü, geçiş başvuru anlamına gelir. Burada bir örnek:

$b=2;
$a=$b;
$a=3;
print $a;
print $b;
// output is 32

$b=2;
$a=&$b; // note the & operator
$a=3;
print $a;
print $b;
// output is 33

Biz kullanılan ve yukarıdaki kodda, çünkü Operatör, $ b işaret nerede bir referans $ a saklanır. Yani $ a $ b aslında bir göstericidir.

PHP, argümanlar varsayılan (C esinlenerek) göre değer geçirilir. Eğer değerleri geçirdiğinizde, bir işlevi çağırırken Yani, onlar referans değerine göre kopyalanır. Bu çoğu durumda varsayılan. Ancak bir işlevi tanımlarken, başvuru davranış ile geçmek için bir yol var. Örnek:

function plus_by_reference( &$param ) {
      // what ever you do, will affect the actual parameter outside the function
      $param++;
}

$a=2;
plus_by_reference( $a );
echo $a;
// output is 3

Bu gibi davranmaya birçok yerleşik işlevleri vardır. Bir diziyi sıralar sort () fonksiyonu dizinin doğrudan etkileyecek ve başka sıralı dizi dönmeyecek gibi.

Ama ilginçtir bir şey var. Pass-by-value modu daha fazla bellek kullanımına neden olabilir, ve PHP kod daha hızlı çalışmasını sağlamak ve bellek kullanımını en aza indirmek için bir dil (yani PHP ile yazılmış programlar kadar hızlı derlenmiş programları gibi değildir), çünkü, bazı tweaks vardır PHP yorumlayıcı. Bir tembel-copy (I adından emin değilim) 'dir. Hangi Bunun anlamı:

Eğer başka bir değişken başa zaman, PHP, ikinci değişkene birinci değişkenin bir başvuru kopyalamak olacaktır. Bu yüzden yeni değişken, aslında şimdiye kadar ilki için bir referanstır. Değeri henüz kopyalanmaz. Eğer bu değişkenlerden herhangi birini değiştirmek için çalışırsanız Ama, PHP değerinin bir kopyasını yapmak ve daha sonra değişken değiştirir olacaktır. SİZ DEĞER değiştirmek istemiyorsanız Bu şekilde, bellek ve zaman kazanmak için fırsat olacaktır.

Yani:

$b=3;
$a=$b;
// $a points to $b, equals to $a=&$b
$b=4;
// now PHP will copy 3 into $a, and places 4 into $b

Eğer nesne 'entryid' mülk haline $ entryid değerini yerleştirmek istiyorsanız, tüm bu sonra, yukarıdaki kodu bu yapacak, ve bunlardan herhangi değiştirene kadar az bellekte, sonuçları entryid değerini kopyalamak değil kullanımı. Aslında ikisini aynı değere işaret etmek istiyorsanız, o zaman bu kullanın:

$this->entryId=&$entryId;

Bu sözdizimi, bir sınıf üyesi erişen bir yoludur. PHP işaretçileri yok, ama referanslar var.

(Bir gösterici değil iken nokta notasyonu kullanılır oysa.) Eğer alıntı konum sözdizimi temelde C + + 'da bir sınıf için bir işaretçi bir üyeyi erişim gibi aynı

Diğerleri dedi Hayır, "PHP hiçbir Pointer yoktur." ve ben PHP RAM_related şey yok, ekleyin.

Ve ayrıca tüm cevaplar açıktır. Ama karşı olamayacağını bırakılmak noktalar vardı!

There are number of things that acts similar to pointers

  • eval inşa (benim en sevdiğim ve aynı zamanda tehlikeli)
  • $GLOBALS değişkeni
  • Değişkenler önce Ekstra '$' işareti (gibi prathk sözü)
  • Referanslar

First one

İlk başta ben PHP "eval" adında bir yapı vardır bilerek, gerçekten güçlü bir dil olduğunu söylemek zorundayım, bu yüzden çalışırken size PHP kodu oluşturabilirsiniz! (Gerçekten harika!)

çok daha yıkıcı olduğunu SQL_Injection olan PHP_Injection tehlikesi olmasına rağmen. Dikkat!

Örnek:

Code:

$a='echo "Dünya Merhaba.";';
eval ($a);

Output

Dünya Merhaba.

Yani yerine başka bir değişken gibi hareket için bir işaretçi kullanarak, You Can Make A Variable From Scratch !


Second one

$GLOBAL değişkeni Bunu tuşlarını kullanarak tüm değişkenleri erişebilir, oldukça yararlıdır.

Örnek:

Code:

$three="Hello";$variable=" Amazing ";$names="World";
$arr = Array("three","variable","names");
foreach($arr as $VariableName)
    echo $GLOBALS[$VariableName];

Output

Merhaba Amazing World

Note: Diğer superglobals daha küçük ölçeklerde aynı hile yapabilirsiniz.


Third one

Eğer bir değişken önce istiyorum '$' ın olarak ne yaptığınızı biliyorsanız, kadar ekleyebilirsiniz.

Örnek:

Code:

$a="b";
$b="c";
$c="d";
$d="e";
$e="f";

echo $a."-";
echo $$a."-";   //Same as $b
echo $$$a."-";  //Same as $$b or $c
echo $$$$a."-"; //Same as $$$b or $$c or $d
echo $$$$$a;    //Same as $$$$b or $$$c or $$d or $e

Output

b-c-d-e-f


Last one

Referans işaretçiler çok yakın, ama this link Daha fazla açıklama için kontrol etmek isteyebilirsiniz.

Örnek 1:

Code:

$a="Hello";
$b=&$a;
$b="yello";
echo $a;

Output

yello

Örnek 2:

Code:

function junk(&$tion)
{$GLOBALS['a'] = &$tion;}
$a="-Merhaba Dünya<br>";
$b="You-To Yanısıra";
echo $a;
junk($b);
echo $a;

Output

-Merhaba Dünya

You-To Yanısıra

Bu yardımcı olur umarım.

Sorunuzun ikinci kısmını cevaplamak için - PHP hiçbir işaretçiler vardır.

Nesnelerle çalışırken, genellikle referans ziyade değere geçmek - yani bazı açılardan bu bir işaretçi gibi çalışır, ama genellikle tamamen şeffaftır.

Bu kullandığınız PHP sürümüne bağlıdır yapar.

Yes there is something similar to pointers in PHP but may not match with what exactly happens in c or c++. Following is one of the example.

$a = "test";
$b = "a";
echo $a;
echo $b;
echo $$b;

//output
test
a
test

Bu PHP işaretçiler benzer kavramını göstermektedir.

PHP referans (pointer) tarafından Diziler ve Nesneler geçer. Normal bir değişken Ex geçmek istiyorum. $ Var = 'boo'; sonra $ boo = & $ var kullanmak;.

PHP işaretçileri gibi bir şey kullanabilirsiniz:

$y=array(&$x);

Şimdi $ y $ x ve $ y [0] bir işaretçi dereferences bir işaretçi gibi davranır.

Değeri dizi (& $ x) sadece bir değerdir, bu yüzden bile bu işaretçi değişkeni bir işaretçi oluşturmak diğer değişkenler, vb kopyalanan diğer dizilerde saklanır fonksiyonları, geçirilebilir. (Ancak, işaretçi kıracak Dizgeleştirme.)