Sınıf değişkenleri ile problem, onları kullanmak durumunda fonksiyon blok

3 Cevap php

Burada sınıfta erişimde değişkenleri sorunu yaşıyorum kod

class Text {

      private $text = '';

      private $words = '';
      // function to initialise $words
      private  function filterText($value,$type) {
          $words = $this->words;
          echo count($words); // works returns a integer
          if($type == 'length') {
              echo count($words); // not works returns 0
          }
          $this->words = $array;
      }
      // even this fails 
      public function filterMinCount($count) {
         $words = $this->words;
         echo count($words);
         if(true){
           echo 'bingo'.count($words);
         }
      }
}

Herhangi biri bana nedenini söyleyebilir

3 Cevap

Sadece bariz şey fark:

$this->words = $array; içinde satır Text::filterText() yanlış.

Sen tanımsız bir değişkeni internal niteliğini belirliyor ($array) yani $this->words null ayarlanmış olur. Böylece, arama dahaki sefere count($this->words) onu dönecektir 0.

İkincisi - diğer insanların sordu gibi - please post the whole code as you use it.

Değişken "$ dizi" eksik. Daha sonra:

<?php
    echo count( '' ); // 1
    echo count( null ); // 0
?>

Belki bu sorun?

Selamlar

Ben sadece bir yapıcı ve bazı kukla veri ile yeniden bir düşeni yaptık, ben aşağıda kaynak kopyalanan ve çıkışı ve sınıf değişkenleri kullanarak gerçeğini göstermek için kurucu kullandım.

Öncelikle $ kelime değişkeni bir dizi olarak tanımlanır ve ben sadece çalıştığını kanıtlamak için iki veri parçaları ile doldurulan ettik, yapıcı ardından 2 çıkışları olan $this->filterText("", "length") çağıran iki dizi iki sahip olarak doğru olan içinde dizeleri. $ Kelime dizisi 5. değerleri içeren sonra sıfırlanır ve yapıcı sonra da doğru olan 5 çıkışları $this->filterMinCount(0) hangi çağırır.

Çıktı:

22

5bingo5

Umarım bu yardımcı olur

class Text {

private $text = '';

private $words = array('1', '2');

function __construct()
{
	//calling this function outputs 2, as this is the size of the array
	$this->filterText("", "length");

	echo "<br />";

	$this->filterMinCount(0);
}

// function to initialise $words
private function filterText($value,$type) 
{
	$words = $this->words;

	echo count($words); // works returns a integer

	if($type == 'length') 
	{
		echo count($words); // not works returns 0
	}

	//reset the array
	$this->words = array(1,2,3,4,5);
}

// even this fails 
public function filterMinCount($count) 
{
	$words = $this->words;

	echo count($words);

	if(true)
	{
		echo 'bingo'.count($words);
	}
}

}