PHP Hata: var_dump ($ a) farklı bir değer gösterir ve farklı bir değer $ a baskılar dönmek

1 Cevap

Ben veritabanını sorgulamak ve belirli id ​​için var ve orada ben bu kod parçası varsa içeriği alacağı bir işlevi vardır:

var_dump($a); ---STEP 1
return $a     ---STEP 2
var_dump($a); ---STEP 3
exit();       ---STEP 4

Ben ($ a) var_dump yaptığınızda, bana --- ADIM 1 verir

    object(ArrayObject)[67]
  public 'shoppingBasket' => 
    array
      'offers' => 
        array
          10 => 
            array
              ...
          11224 => 
            array
              ...
  public 'recommendations' => 
    array
      10017 => 
        array
          'object_id' => string '10017' (length=5)
          'offer_type' => string 'Atomic' (length=6)
          'family' => string '' (length=0)
          'is_unica' => boolean false
          'financial_terms' => 
            array
              ...
          'contract_constraints' => 
            array
              ...
          'prices' => 
            array
              ...

$a arasında olduğu gibi bana --- ADIM 3 verir daha ArrayObject yazın ama dönüş kullanmayın zaman $a ve var_dump($a) daha

O:11:"ArrayObject":2:{s:14:"shoppingBasket";a:1:{s:6:"offers";a:2:{i:10;a:8:{s:9:"object_id";s:2:"10";s:6:"family";s:8:"Internet";s:8:"is_unica";b:1;s:10:"offer_type";s:6:"Atomic";s:24:"product_specification_id";s:6:"134455";s:20:"contract_constraints";a:5:{s:19:"min_contract_period";s:1:"1";s:13:"notice_period";s:2:"12";s:15:"rollover_period";s:1:"1";s:18:"right_of_wd_period";s:1:"1";s:19:"cancellation_period";s:6:"ALWAYS";}s:15:"financial_terms";a:3:{s:14:"billing_period";a:2:{i:0;s:6:"YEARLY";i:1;s:9:"QUARTERLY";}s:14:"payment_method";a:1:{i:0;s:12:"DIRECT_DEBIT";}s:17:"bill_presentation";a:1:{i:0;s:5:"PAPER";}}s:6:"prices";a:1:{i:25;a:1:{s:9:"object_id";s:2:"25";}}}i:11224;a:8:{s:9:"object_id";s:5:"11224";s:6:"family";s:8:"Internet";s:8:"is_unica";b:0;s:10:"offer_type";s:11:"DOUBLE_PLAY";s:24:"product_specification_id";s:5:"32567";s:20:"contract_constraints";a:5:{s:19:"min_contract_period";s:1:"8";s:13:"notice_period";s:1:"2";s:15:"rollover_period";s:1:"6";s:18:"right_of_wd_period";s:1:"1";s:19:"cancellation_period";s:12:"END_OF_MONTH";}s:15:"financial_terms";a:3:{s:14:"billing_period";a:2:{i:0;s:6:"YEARLY";i:1;s:9:"QUARTERLY";}s:14:"payment_method";a:1:{i:0;s:12:"DIRECT_DEBIT";}s:17:"bill_presentation";a:1:{i:0;s:5:"PAPER";}}s:6:"prices";a:0:{}}}}s:15:"recommendations";a:1:{i:10017;a:7:{s:9:"object_id";s:5:"10017";s:10:"offer_type";s:6:"Atomic";s:6:"family";s:0:"";s:8:"is_unica";b:0;s:15:"financial_terms";a:3:{s:14:"billing_period";a:1:{i:0;s:9:"QUARTERLY";}s:14:"payment_method";a:1:{i:0;s:12:"DIRECT_DEBIT";}s:17:"bill_presentation";a:1:{i:0;s:5:"PAPER";}}s:20:"contract_constraints";a:5:{s:19:"min_contract_period";i:24;s:19:"cancellation_period";s:6:"ALWAYS";s:13:"notice_period";i:3;s:15:"rollover_period";i:2;s:18:"right_of_wd_period";i:1;}s:6:"prices";a:1:{i:99;a:1:{s:9:"object_id";s:2:"99";}}}}}

Onun bu şekilde oluyor neden biz veritabanını sorgulamak ve o kimliği için içerik almak daha biz belirli id ​​veritabanında içerik normalde eğer, emin değilim.

Q: Ama neden burada $a için farklı değerler, herhangi bir öneriniz alıyorum emin değilim?

Q: nasıl php ADIM 3 çıkışını unserialize olabilir. I unserialize fonksiyonunu ama onun değil çalışma kullanarak denedim.

Teşekkürler.

Update:

İşte associateCollateral işlevi çağıran işlevi:

  public function getOfferById($id, $raw = FALSE)
        {
                $offers = $this->getOfferDao()->getByID($id);
                $offer_count = $offers->count();
                //var_dump($offer_count);
                //exit();
                // Throw an exception if no results were found.
                if (!$offers->count())
                {
                        throw new Exception("No offers were found while searching for ids: {$id}.");
                }

                if (!$raw)
                {
                        $offers = $this->validateOffers($offers);
                }


                // Associate collateral content with offers to send back.
                return $this->associateCollateral($offers);
                //$val = $this->associateCollateral($offers);
                //echo "Here is the value of Associate Collateral \n";
                //var_dump($val);
                //exit();

        }

İşte o gitmek ve teminat içeriği veritabanına kontrol ve sağlanan içeriği id bazı teminat içerik varsa bakacağız olurdu daha associateCollateral function denir associateCollateral Fonksiyonu, ve bunu yaparsa gitmek ve teminat içeriği alacağı daha.

  private function associateCollateral($entities)
        {
                //var_dump($entities);

                // Extract all object ids from the given set of ids, and pass into the getContentId.
                $content_ids = $this->getCollateralDao()->getContentId(array_keys($entities->offsetGet('recommendations')));
                // Call to CMS to get collateral content.
                /*foreach($content_ids as $content_id)
                {
                         $contentObj = CmsObjectHandler::get(OBJECT_TYPE_CONTENT,$content_id);
                         $content = $contentObj->getContent();
                         $result += $content;
                         echo"Here \n";
                         print_r($result)."\n";
                         //exit();
                }*/
                var_dump($entities);  ---STEP1
                return $entities;     ---STEP2
                //var_dump($entities);  ---STEP3
                //exit();
        }

1 Cevap

Ben Comment yeterince itibar yok gibi görünüyor. Yani bu bir cevap ancak daha fazla bilgi için bir istek değildir.

PHP havadan veri tefrika için basitçe mümkün değildir koydu. Sizin işlevi örneğin dönüş $ a dan dönüş arasındaki bir şey; (Adım 2) ve var_dump ($ a) (adım 3) çağrısı verileri serialising edilir.

Sen işlevi çağrısı dahil olmak üzere kod büyük bir pasajı sağlamak için gereken ve bu işlevi çağrısından sonra olur ve var_dump önce (3. aşama) ne olacak

Do you call var_dump immediately after the function return? Is the function called via another function?

DC

Tamam

Adım 3) (associateCollateral idam asla. Ben bir hatayı orijinal soruyu sadece kısaltılmış merak ya da vardı

            var_dump($entities);  ---STEP1
            return $entities;     ---STEP2 <== function is exited  
            var_dump($entities);  ---STEP3 <== never executed
            //exit();

Bu tefrika çıkışı ile görüyoruz yankı sizin başka bir kod parçası anlamına gelir

DC

There is another print statement somewhere in your code displaying the serialised data. Comment out all the var_dump statements and run it again. My guess is that the serialised data will still be output. Don't forget serialised data is merely a string so it can be output by an echo or print statement which could be anywhere in your code. Probably somewhere after the getOfferById() function is called.

Sıralanmış veri var_dump ifadeleri yorumlama sonra çıkışı değilse, o zaman yeniden görünürse seri hale getirilmiş verileri kadar bir anda her tek tek yeniden etkinleştirebilirsiniz. ancak bu senaryo verdiğiniz bilgi verilmedi son derece düşüktür

DC