liebewinter: current_page hat keine wirkunge,,,

0 33

current_page hat keine wirkunge,,,

  1. 0
  2. 0
  3. 0
    1. 0
      1. 1
        1. 0
        2. 0
          1. 0
            1. 0
        3. 0
          1. 0
            1. 0
          2. 0
            1. 0

              Eine wichtige Korrektur

              1. 0
              2. 0

                Eine Frage über deine Code..

                1. 0
                  1. 0
                    1. 0
                2. 1
                  1. 0
                    1. 0
                      1. 0
                        1. 0
                  2. 0
                    1. 1
                      1. 0
                      2. 0

                        noch eine frage........

                        1. 0
                          1. 0
                            1. 0
                              1. 0

Hallo , meine Probleme... auf die datei code.php , have diese Code;

<?php

header('Content-Type: text/html; Charset=utf-8');
mb_internal_encoding('UTF-8');
date_default_timezone_set('Europe/Berlin');
error_reporting(E_ALL);


class ClassProveContakt3 
{     
     private $current_page;
    
     


      function me () 
      {
       $current_page = 0; 
?>
      
       <nav class="link_wechsel">
         <h2 class="visually-hidden">Page navigation</h2>
         <ul>
          <li><a <?php if ($current_page=="1"): ?>aria-current="page" <?php endif ?> href="hallo-1.php">1</a></li>
          <li><a <?php if ($current_page=="2"): ?>aria-current="page" <?php endif ?> href="hallo-2.php">2</a></li>
         </ul>
       </nav>

<?php
      }

}

?>

ich habe auf die Variable $current_page = 0; eine Werte gegeben weil ohne ihn auf den Browser bekommtet , error...

dann habe zwei Dateien hallo-1.php und hallo-2.php , alle beiden haben gleiche Code;

<?php  

include 'code.php';
header("Content-Type: text/html; Charset=utf-8");
mb_internal_encoding('UTF-8');
date_default_timezone_set('UTC');
error_reporting(E_ALL);

$ProveContackt=new ClassProveContakt3;

?>

<!doctype html>

<html lang="en">

<head>

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<title>beispiel-1</title>

 

 

</head>

<style>

 

.link_wechsel ul {

    list-style-type: none;

    margin-left: 340px;

}

 

.link_wechsel li {

  display: inline;

}

 

.link_wechsel a {

   display: inline;

   text-decoration: none;

   border: 1px solid gray;

   background-color: #FE2E64;

   color: black;

   padding: 8px;

   opacity: 0.5;

   font-family: Times New Roman;

}

 

.link_wechsel a:hover {

   background-color: #9f9e9e;

}

 




.link_wechsel a[aria-current=page] {

   background-color: green;
}



</style>

 

 

<body>

<h3>Page 1</h3>

 

<?php

 $ProveContackt->me();
 $current_page= "1";

?>
 
</body>

</html>

Wie der Screenshot zeigt , wen ich auf der Datei hallo-1.php bin , die Farbe verendert sich nicht....

  1. ich habe versucht so zu machen $current_page = ['1', '2']; , aber bekomme kein verendung.. , Villeicht soll ich Erste mit Array , Beispiel;

    $current_page = ($_SERVER['REQUEST_URI']);
    
    $hoffe = array('me_1' => '1', 'me_2' => '2');
    
    
    foreach ($hoffe as $key => $value)
    { 
    
       if($current_page == $hoffe)
       {
    

    ich weiss nicht was ich hier schreibe soll....

  2. class ClassProveContakt3 
    {     
         private $current_page;
    
          function me () 
          {
           $current_page = 0; 
    

    Du setzt also: $current_page = 0!

              if ($current_page=="1"): []
              if ($current_page=="2"): []
    

    Demnach kann $current_page niemals 1 oder zwei 2 sein. Du hast es ja soeben auf 0 gesetzt.

    Auch der übrige Code ist nicht logisch. Bei den meisten Zeilen erkenne ich nicht was Du vor hast. Hast Du einen Plan?

  3. Liebe(r) liebewinter,

    Du definierst eine Klasse ClassProveContakt3, die eine Methode me und eine Eigenschaft current_page hat.

    Die Eigenschaft ClassProveContakt3::current_page wird in Deinem Code nie verwendet, sondern immer nur eine lokale Variable $current_page in der Methode ClassProveContakt3::me. Warum ist das so?

    Wenn Du innerhalb von ClassProveContakt3::me auf ClassProveContakt3::current_page zugreifen möchtest, musst Du $this->current_page anstelle von $current_page notieren!

    Liebe Grüße,

    Felix Riesterer.

    1. ich habe geschrieben wie du sagst ,

      this->current_page;
      

      aber bekomme das gleich Probleme , bekomme dieses warnung..auf der Variable current_page , kein Wert gegeben habe ...

      wenn schreibe ,

      <li><a <?php if ($this->current_page=='1'): ?>aria-current="page" <?php endif ?> href="hallo-1.php">1</a></li>
      

      bekomme wie auf meinen Erste Screeshot , aber die farbe verendert sich nicht..

      1. Hallo liebewinter,

        Dein Code ist nicht geeignet um Dein Ziel zu erreichen. Daran ist praktisch alles logisch falsch. Ich habe die Klasse und deren Verwendung also mal völlig neu geschrieben.

        Du solltest das durcharbeiten und Du solltest uns für jede Zeile erklären, was in dieser Zeile geschieht.

        Grund: Ich habe den Eindruck, dass Du ohne jede Vorstellung davon, was Du da eigentlich machst, Code notierst und Dich dann wunderst, dass Dein Skript nicht das erwartete Resultat zeigt. Das beginnt schon bei den von Dir gewählten Namen welche verwirrend (also: nicht logisch) sind.

        <?php
        class NavigationLinkList {     
        	private $current_page;
        	private $arLinks;
            
        	public function __construct( $arNewLinks = false ) {
        		$this -> arLinks = []; 
        		$this -> addLinks ( $arNewLinks );
        		$this -> current_page = $_SERVER['REQUEST_URI'];
        	}
             
        	public function addLinks ( $arNewLinks ) {
        		$flagErrors = false;
        		if ( isset( $arNewLinks['URL'] ) && isset( $arNewLinks['TEXT'] ) ) {
        			array_push( $this -> arLinks, $arNewLinks );
        			return true;
        		}
        		if ( is_array ( $arNewLinks ) ) {
        			foreach ( $arNewLinks as $NewLink ) {
        				if ( isset( $NewLink['URL'] ) && isset( $NewLink['TEXT'] ) ) {
        					array_push( $this -> arLinks, $NewLink );
        				}               
        			}
        		} else {
        			$flagErrors = true;
        		}
        		return false == $flagErrors;
        	}
        
        
        	public function printNav() {
        		echo '
        		<nav class="link_wechsel">
        			<h2 class="visually-hidden">Page navigation</h2>
        			<ul>' .  PHP_EOL;
                
        		foreach ( $this -> arLinks as $link ) {
        			if ( $this -> current_page == $link['URL'] ) {
        				$aria = ' aria-current="page"';
        			} else {
        				$aria = '';
        			}
        			echo '				<li><a' . $aria . ' href=' . $link['URL'] .'">' . $link['TEXT'] . '</a></li>' . PHP_EOL;
        		}
                
        		echo '
        			</ul>
        		</nav>' .  PHP_EOL;
        	}
        }
        
        ###############################
        # Usage/Tests:                #
        ###############################
        
        #/*
        $_SERVER['REQUEST_URI'] = '/page1.php';
        
        echo "Version 1:\n";
        $navListe = new NavigationLinkList( [ ['URL' => '/page1.php', 'TEXT' => '1'], ['URL' => '/page2.php', 'TEXT' => '2'] ] );
        $navListe -> printNav();
        echo "\n-------------------------------------------------------------\n";
        
        echo "Version 2:\n";
        $navListe = new NavigationLinkList();
        $navListe -> addLinks( [ ['URL' => '/page1.php', 'TEXT' => '1'], ['URL' => '/page2.php', 'TEXT' => '2'] ] );
        $navListe -> printNav();
        echo "\n-------------------------------------------------------------\n";
        
        echo "Version 3:\n";
        $navListe = new NavigationLinkList();
        $navListe -> addLinks( [ 'URL' => '/page1.php', 'TEXT' => '1' ] );
        $navListe -> addLinks( [ 'URL' => '/page2.php', 'TEXT' => '2' ] );
        $navListe -> printNav();
        echo "\n-------------------------------------------------------------\n";
        
        #*/
        

        Ausgaben:

        tmp$ php test.php 
        Version 1:
        
        		<nav class="link_wechsel">
        			<h2 class="visually-hidden">Page navigation</h2>
        			<ul>
        				<li><a aria-current="page" href=/page1.php">1</a></li>
        				<li><a href=/page2.php">2</a></li>
        
        			</ul>
        		</nav>
        
        -------------------------------------------------------------
        Version 2:
        
        		<nav class="link_wechsel">
        			<h2 class="visually-hidden">Page navigation</h2>
        			<ul>
        				<li><a aria-current="page" href=/page1.php">1</a></li>
        				<li><a href=/page2.php">2</a></li>
        
        			</ul>
        		</nav>
        
        -------------------------------------------------------------
        Version 3:
        
        		<nav class="link_wechsel">
        			<h2 class="visually-hidden">Page navigation</h2>
        			<ul>
        				<li><a aria-current="page" href=/page1.php">1</a></li>
        				<li><a href=/page2.php">2</a></li>
        
        			</ul>
        		</nav>
        
        -------------------------------------------------------------
        
        1. Hallo ursus,

          gute Idee, die Navigationslinks als Widget in eine Klasse zu kapseln.

          Ich hätte aber 2 Einwände:

          • Code wird mit echo ausgegeben statt in den HTML Kontext zu wechseln
          • Codewiederholung und Verletzung des Do One Thing Prinzips in addLinks, da gehört eine private-Methode checkAndStoreLink hin, die validiert und speichert

          Ob man den Rahmen der Navigation von der Klasse ausgeben lässt, darüber könnte man auch diskutieren. Ich würde das nicht als Job dieser Klasse sehen, es erschwert Wiederverwendung.

          Rolf

          --
          sumpsi - posui - clusi
        2. Erste viel danke für deinen Bemüht ! , es ist "Einbissen" schwierig der code zu verstehen , aber habe versucht es zu "Übersetzen"... , bis jetzt habe nur ein Teil geschaft.. ist diesen…

          #Hier baut ein Class , auf die Eigenschaften , $current_page und $arLinks werden die Sichtbarkeit private gegeben , so kann nur innerhalb dieser Klasse verändert werden.
          
          class NavigationLinkList {
                   private $current_page;
                   private $arLinks;
          
          
          
                #Mit dem Methode(Function) __constructor wird das Object erzeugt , Beispiel hier , $this -> addLinks ( $arNewLinks ); , wird das Object $arNewLinks erzeugt ....
          
                   public function __construct( $arNewLinks = false ) { #An der Eingenschaft $arNewLinks geben das Wert , false .
                     $this -> arLinks = [];
                     $this -> addLinks ( $arNewLinks );
                     $this -> current_page = $_SERVER['REQUEST_URI'];
                 }
                
                 #Bauen das Methode addLinks und geben die Eigenschaft als $arNewLinks .
                
                 public function addLinks ( $arNewLinks ) {
                      $flagErrors = false; #Baue die Eigenschaft $flagErrors und geben das Weet , false .
                     
                      #An der Eigenschaft, $arNewLinks ,hast der Wert false gegeben , das bedeutet hier wird gefragt , wenn nicht....
                      if ( isset( $arNewLinks['URL'] ) && isset( $arNewLinks['TEXT'] ) ) { # Mit isset überprüft ob die Eigenschaften  $arNewLinks und  $arNewLinks  mit den Werten URL   und  TEXT existieren...             
                       array_push( $this -> arLinks, $arNewLinks ); #Mit array_push addieren die Eigenschaften arLinks und $arNewLinks an ende der array .
                            return true;  #Rückkehr als wahr , das Ergebnis wird gezeigt .
                       }     
                 }
                     
                       if ( is_array ( $arNewLinks ) ) { #Überprüft ob eine Eigenschaft vom  Typ array ist .
                                foreach ( $arNewLinks as $NewLink ) {  #Mit dem Foreach-schleifen werden die Elemten des array zu iterieren .
                            if ( isset( $NewLink['URL'] ) && isset( $NewLink['TEXT'] ) ) { #wenn die Eigenschaften $NewLink und $NewLink sind....
                               array_push( $this -> arLinks, $NewLink ); # Adderieren die Eigenschaft $NewLink auf dem array...
                                   }
                         }
                       } else {
                          $flagErrors = true; #was hier wird bekomme , habe ich keine Ahnung.....
                       }
                            return false == $flagErrors; #Wenn beiden möglichkeit (if, else) sind nicht , return false...
                  }
          
                 
                  public function printNav() { #Mit diese function baut die Tabelle für die Links...
                    echo ' <nav class="link_wechsel">
                      <h2 class="visually-hidden">Page navigation</h2>
                       <ul>' . PHP_EOL;
                        foreach ( $this -> arLinks as $link ) {  #Mit dem Schleifer geben an dem Object arLinks der name   $link  .      
                        if ( $this -> current_page == $link['URL'] ) { #Wenn current_page gleich wie $link['URL'] , das ist , der Seite wo ich bin .
                         $aria = ' aria-current="page"'; #Auf der Eingenschaft $aria geben das Wert dem auf CSS stehe...
                        } else {
                          $aria = ''; #kommt nicht ...
                        }
                       echo ' <li><a' . $aria . ' href=' . $link['URL'] .'">' . $link['TEXT'] . '</a></li>' . PHP_EOL;#Warum echo ist nicht auf if ??
                       }
                        echo '
                          </ul>
                       </nav>' . PHP_EOL; #Geschlossen der nav...
                   }
                }
          

          Diese teil

          array_push( $this -> arLinks, $arNewLinks );
          

          habe ich nich gut verstande... wie auf dieser Link zeigt die array_push wird benutz um adderiert etwas auf einen array der bevor in einem andere array ausgefullt wurde....

          Morgen versuche die andere teil dir zu schicken...☺️

          1. ein Screenshot wie deine Code zeigt...wie deine Code siehst...

            1. ich frühr fehler mit dem Code ... screenshot mein browser meine Screeshot...

        3. so , wie ich sehe , brauche nicht "Übersetze" was Unten deine Code steht... , sie sind drei möglichkeit die du mir gibst um die Links zu verlinken... .

          Wie deine Code aussiehst...

          <?php
          class NavigationLinkList {     
          	private $current_page;
          	private $arLinks;
              
          	public function __construct( $arNewLinks = false ) {
          		$this -> arLinks = []; 
          		$this -> addLinks ( $arNewLinks );
          		$this -> current_page = $_SERVER['PHP_SELF'];
          	}
               
          	public function addLinks ( $arNewLinks ) {
          		$flagErrors = false;
          		if ( isset( $arNewLinks['URL'] ) && isset( $arNewLinks['TEXT'] ) ) {
          			array_push( $this -> arLinks, $arNewLinks );
          			return true;
          		}
          		if ( is_array ( $arNewLinks ) ) {
          			foreach ( $arNewLinks as $NewLink ) {
          				if ( isset( $NewLink['URL'] ) && isset( $NewLink['TEXT'] ) ) {
          					array_push( $this -> arLinks, $NewLink );
          				}               
          			}
          		} else {
          			$flagErrors = true;
          		}
          		return false == $flagErrors;
          	}
          
          
          	public function printNav() {
          		echo '
          		<nav class="link_wechsel">
          			<h2 class="visually-hidden">Page navigation</h2>
          			<ul>' .  PHP_EOL;
                  
          		foreach ( $this -> arLinks as $link ) {
          			if ( $this -> current_page == $link['URL'] ) {
          				$aria = ' aria-current="page"';
          			} else {
          				$aria = '';
          			}
          			echo '				<li><a' . $aria . ' href=' . $link['URL'] .'>' . $link['TEXT'] . '</a></li>' . PHP_EOL;
          		}
                  
          		echo '
          			</ul>
          		</nav>' .  PHP_EOL;
          	}
          }
          
          
          
          
          $_SERVER['PHP_SELF'];
          
          
          
          echo "Version 3:\n";
          $navListe = new NavigationLinkList();
          $navListe -> addLinks( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] );
          $navListe -> addLinks( [ 'URL' => '/provee/page_2.php', 'TEXT' => '2' ] );
          $navListe -> printNav();
          
          

          Wie du siehst , habe ich mich entschieden von dem Version 3 .. , hier ein Screenshot wie sie aussiehst…

          wie mit Version 3 aussiehst...

          Ich weiss nicht ob meine Erklärung auf deinen Code der Gestern gepostet habe , geprüft hast....

          Mir gibt es Sachen die nicht so klar sind...

          Beispiel;

          array_push( $this -> arLinks, $arNewLinks );
          

          wie auf dieser Link zeigt der array_push wird benutz um adderiert etwas auf einen array der bevor in einem andere array ausgefullt wurde....aber in deine Code , vor dieser array , gibt es keine.......

          dann habe Probleme mit dieser Zeichnung #/* zu verstehe..ich weiss das # und /* werden benutze um zu kommentiere , aber wie ich sehe auf deine Code , beiden zusammen , hat ein andere Bedeutung...

          1. Mir gibt es Sachen die nicht so klar sind...

            Beispiel; array_push( $this -> arLinks, $arNewLinks );

            wie auf dieser Link zeigt der array_push wird benutz um adderiert etwas auf einen array der bevor in einem andere array ausgefullt wurde....aber in deine Code , vor dieser array , gibt es keine.......

            $foo = array_push( $array, neuesItem );
            

            würde die neue Anzahl der Array-Elemente in $foo speichern. Ich brauche diese Anzahl nicht. Im Array $array findet sich die alten und die neuen Daten. Das Handbuch / Funktionsreferenz sagt genau das. Es lohnt sich also, ins Handbuch zu schauen.

            Ich brauche diese Anzahl nicht, deshalb kann ich $foo = weglassen.

            Die Syntax erscheint auch mir unlogisch - aber es gibt nicht nur in PHP viele solcher Funktionen.

            Probiere;

            <pre><?php
            $array = [ 'foo', 'bar' ];
            print_r($array);
            
            /*  Output:
            Array
            (
                [0] => foo
                [1] => bar
            )
            */
            $z = array_push( $array, 'baz' );
            echo "Array hat jetzt $z Elemente. " . PHP_EOL;
            
            /* Output:
            Array hat jetzt 3 Elemente.
            */
            
            print_r( $array );
            
            /* Output:
            Array
            (
                [0] => foo
                [1] => bar
                [2] => baz
            )
            
            */
            $z = array_push( $array, 'tok', 'quix');
            echo "Array hat jetzt $z Elemente. " . PHP_EOL;
            
            /* Output:
            Array hat jetzt 5 Elemente.
            */
            
            print_r( $array );
            
            /* Output:
            Array
            (
                [0] => foo
                [1] => bar
                [2] => baz
                [3] => tok
                [4] => quix
            )
            
            */
            

            dann habe Probleme mit dieser Zeichnung #/* zu verstehe..ich weiss das # und /* werden benutze um zu kommentiere , aber wie ich sehe auf deine Code , beiden zusammen , hat ein andere Bedeutung…

            Das ist Trick, mit dem durch Eingabe/Löschen eines Zeichens (#) ganze Codeblöcke an- und ausgeschaltet werden. Das macht man für Tests und beim Debuggen.

            #/*
            echo 'Das ist ein Bereich, 
            ... der ganz einfach abgeschaltet werden kann.';
            #*/
            
            /*
            echo 'Das ist ein Bereich, 
            ... der ganz einfach abgeschaltet wurde.';
            #*/
            
            1. jetz habe besser dein Code angeschaut und weiss wo der Erste array kommt..

              Heute habe gelernt wenn man eckige-Klamer in eine Variable benutz ,ihre Wert wird in Array erzeugt…

              so , wo meine Erste Array ist ;

              $this -> arLinks = []; 
              

              und hier adderiert das neue Wert $arNewLinks zum meine Array arlinks

              array_push( $this -> arLinks, $arNewLinks );
              
          2. $this -> current_page = $_SERVER['PHP_SELF'];
            

            Das ist der Dateiname des aktuellen Skriptes, ausgehend vom $_SERVER['DOCUMENT_ROOT']. Du willst aber den Ressourcen-Name vergleichen, der in der URL gesendet wurde.

            Der relevante Teil abgerufene Adresse steht in $_SERVER['REQUEST_URI'].

            Können an der URL Get-Parameter anhängen (oder eben nicht), dann verwende:

            $this -> current_page = explode('?', $_SERVER['REQUEST_URI'])[0];
            

            wenn Du das so lässt, dann wirst Du Probleme bekommen, z.B. wenn mod_rewrite verwendet wird. Also irgendwann. Genauer: Zu einem Zeitpunkt, an dem es Dir gar nicht passt.

            Da oben stehende liefert den ersten Teil der am '?' getrennten URL (Ohne Protokoll, Port, Servername). Beispiel/Test:

            <?php
            
            $_SERVER['REQUEST_URI'] = '/test.php?foo=bar'; # Fake for the test
            echo explode('?', $_SERVER['REQUEST_URI'])[0] . PHP_EOL;
            
            $_SERVER['REQUEST_URI'] = '/test.php';         # Fake for the test
            echo explode('?', $_SERVER['REQUEST_URI'])[0] . PHP_EOL;
            

            Output:

            /test.php
            /test.php
            

            Dann wäre noch das hier:

            $_SERVER['PHP_SELF'];
            

            Das ist keine Kunst, das soll weg!

            1. [Eine Nacht und zwei Kaffee später...]

              Da hatte ich gestern KEINE GUTE Idee. Es war wohl zu spät:

              $this -> current_page = explode('?', $_SERVER['REQUEST_URI'])[0];
              

              Weil an der URL Get-Parameter anhängen können (oder eben nicht), und weil es dann in Abhängigkeit der Get-Parameter nicht die selbe URL ist, verwende:

              $this -> current_page = $_SERVER['REQUEST_URI'];
              

              Die erste Idee war also die beste. Vorhaben fürs neue Jahr: Ich sollte nicht so oft beirren lassen...

              1. Vorhaben fürs neue Jahr: Ich sollte nicht so oft beirren lassen…

                vielen dank weil du mir geholfen hast, auch wenn für mich nur ein Datum wechsel ist…

                ich wünsche dir eine schöne neue Jahr !

              2. Ein Teil der ich nicht gut verstehe...

                
                public function __construct( $arNewLinks = false ) {
                

                Hier wird an der Eigenschaft $arNewLinks der boolean , false gegeben...

                und hier

                if ( isset( $arNewLinks['URL'] ) && isset( $arNewLinks['TEXT'] ) ) {
                

                Was wird gefragt , wenn nicht.... oder wenn... ??

                um für alle von diesen Forum , auch wenn ich weiss nur eine Datum wechsel ist…

                Urte Berri on ! , auf baskische Sprache , Ein frohes Neues Jahr! ☺️

                1. Hallo ,

                  $arNewLinks = false ist der Wert, den PHP verwenden soll wenn du keinen Parameter mitgibst.

                  Bei der isset Abfrage steht nirgendwo NOT oder ein !, das heißt also „Wenn“.

                  Rolf

                  --
                  sumpsi - posui - clusi
                  1. dankeeeeeee für deine antwort !

                    so , wie ich verstehe , false , nicht bedeutet "false" , sonder auf dieser Beispiel hat die bedeutung als neutral ....

                    und weil eine Variable ist man muss einem Wert geben , deshalb geben false oder true...

                    mit true bekomme gleich Ergebnisse wie mit false...

                    1. Liebe(r) liebewinter,

                      so , wie ich verstehe , false , nicht bedeutet "false" , sonder auf dieser Beispiel hat die bedeutung als neutral ....

                      nein. Die Variable $arNewLinks bekommt den Wert false (einen Boole'schen Wahrheitswert), wenn beim Erzeugen des Objekts kein anderer Wert übergeben wird. false ist also ein default-Wert, eine Voreinstellung für $arNewLinks.

                      $a = new NavigationLinkList();
                      // in $a hat $arNewLinks den Wert false (default)
                      
                      $b = new NavigationLinkList(array(1,2,3,4));
                      // in $b hat $arNewLinks den Wert [1,2,3,4]
                      

                      und weil eine Variable ist man muss einem Wert geben , deshalb geben false oder true...

                      Nein! Du darfst auch keinen Wert übergeben, dann wird innerhalb von __construtor eben mit false gearbeitet.

                      mit true bekomme gleich Ergebnisse wie mit false...

                      Klingt das nicht logisch?

                      Wenn Du ein neues Objekt mit new erzeugst, dann wird eine besondere Funktion ausgeführt, die Dir Dein Objekt baut. Diese nennt man Konstruktor. In einer Klasse, die ja ein Bauplan für ein Objekt ist, ist das die Funktion/Methode mit dem Namen __construct.

                      Liebe Grüße,

                      Felix Riesterer.

                2. Ein Teil der ich nicht gut verstehe...

                  
                  public function __construct( $arNewLinks = false ) {
                  

                  Hier wird an der Eigenschaft $arNewLinks der boolean , false gegeben...

                  Richtig. Das mache ich, damit ich einen Default-Wert übergeben kann. Wenn ich mit

                  $LinkList = new NavigationLinkList() 
                  

                  Das Objekt erzeuge, dann wird __construct() ausgeführt. Übergebe ich dabei keine Arrays, dann wäre das ohne ( $arNewLinks = false ) ein Fehler.

                  Durch den kleinen Trick kann ich mir aussuchen, ob ich die Liste schon beim Erzeugen angebe oder später alle Links einzeln oder alle auf einmal.

                  und hier

                  if ( isset( $arNewLinks['URL'] ) && isset( $arNewLinks['TEXT'] ) ) {
                  

                  Was wird gefragt , wenn nicht.... oder wenn... ??

                  Da wird getestet, ob $arNewLinks ein Element mit dem Key 'URL' und eines mit dem Element 'TEXT' hat.

                  Durch diesen Trick teste ich die übergebenen Werte darauf, ob diese meinen Erwartungen entsprechen. Wenn die übergebenen Werte nicht meinen Erwartungen entsprechen wird einfach nichts anderes gemacht als false zurückzugeben.

                  Man könnte damit testen, ob bei der Übergabe der Werte an die Methode addLinks alles geklappt hat - und wenn nicht, den Fehler anzeigen, loggen oder behandeln:

                  $navListe = new NavigationLinkList();
                  if (
                    false === $navListe -> addLinks( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] )
                  ) {
                      # Fehlerbehandlung!
                      echo "<pre>Fataler Programmfehler! Falsche Werte an Methode NavigationLinkList->addLinks() übergeben:\n";
                      print_r( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] );
                      exit;
                  }
                  
                  1. Das Objekt erzeuge, dann wird __construct() ausgeführt. Übergebe ich dabei keine Arrays, dann wäre das ohne ( $arNewLinks = false ) ein Fehler.

                    Deshalb wenn der false Argument nicht gebe , bekomme dieser Warnung…

                    Fatal error: Uncaught ArgumentCountError: Too few arguments to function NavigationLinkList::__construct(), 0 passed in /var/www/html/provee/logic.php on line 67 and exactly 1 expected in /var/www/html/provee/logic.php:13 Stack trace: #0 /var/www/html/provee/logic.php(67): NavigationLinkList->__construct() #1 /var/www/html/provee/page_1.php(89): include('/var/www/html/p...') #2 {main} thrown in /var/www/html/provee/logic.php on line 13

                    habe mit deine Code versucht ,

                    $navListe = new NavigationLinkList();
                    if (
                      false === $navListe -> addLinks( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] )
                    ) {
                        # Fehlerbehandlung!
                        echo "<pre>Fataler Programmfehler! Falsche Werte an Methode NavigationLinkList->addLinks() übergeben:\n";
                        print_r( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] );
                        exit;
                    }
                    

                    Oben mit $arNewLinks = false bekomme eine Weiß Seite , und ohne false , bekomme gleiche Warnung wie von Oben , aber nicht die Warnung der auf echo steht , echo "<pre>Fataler Programmfehler! Falsche Werte an Methode NavigationLinkList->addLinks() übergeben:\n"; .

                    1. Liebe(r) liebewinter,

                      Deshalb wenn der false Argument nicht gebe , bekomme dieser Warnung…

                      Fatal error: Uncaught ArgumentCountError: Too few arguments to function NavigationLinkList::__construct(), 0 passed in /var/www/html/provee/logic.php on line 67 and exactly 1 expected in /var/www/html/provee/logic.php:13 Stack trace: #0 /var/www/html/provee/logic.php(67): NavigationLinkList->__construct() #1 /var/www/html/provee/page_1.php(89): include('/var/www/html/p...') #2 {main} thrown in /var/www/html/provee/logic.php on line 13

                      dann hast Du in Deinem Code keinen Default-Wert definiert. Steht da wirklich
                      public function __construct( $arNewLinks = false ), oder steht da nur
                      public function __construct( $arNewLinks )?

                      habe mit deine Code versucht ,

                      $navListe = new NavigationLinkList();
                      if (
                        false === $navListe -> addLinks( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] )
                      ) {
                          # Fehlerbehandlung!
                          echo "<pre>Fataler Programmfehler! Falsche Werte an Methode NavigationLinkList->addLinks() übergeben:\n";
                          print_r( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] );
                          exit;
                      }
                      

                      Dieser Code ist nicht von mir.

                      Oben mit $arNewLinks = false bekomme eine Weiß Seite

                      Das ist immer ein Zeichen dafür, dass der PHP-Code Fehler hatte, die seine Ausführung komplett verhindert haben. Diese muss man finden. Hilfe dazu geben die Einträge in der jeweiligen Logdatei des Webservers (Apache/Nginx etc.).

                      Liebe Grüße,

                      Felix Riesterer.

                      1. dann hast Du in Deinem Code keinen Default-Wert definiert. Steht da wirklich

                        mit public function __construct( $arNewLinks = false ) {

                        bekomme dieses Fenster ,

                        fenster das ich bekomme mit false

                        ....Fenster ohne False...

                        ohne false

                        1. dann hast Du in Deinem Code keinen Default-Wert definiert. Steht da wirklich

                          mit public function __construct( $arNewLinks = false ) {

                          bekomme dieses Fenster ,

                          fenster das ich bekomme mit false

                          Dann zeig doch mal den Code. Möglicherweise ist das genau das, was zu erwarten ist.

                  2. kannst du Bitte mich korrigiert ob ich Falsch verstande habe ?

                    so , wie ich verstande habe;

                    Mit $this -> arLinks = []; baut ein Leer Array um später mit array_push sich adderiert , wie hier sagt.....

                    if ( isset( $arNewLinks['URL'] ) && isset( $arNewLinks['TEXT'] ) ) {     
                    			array_push( $this -> arLinks, $arNewLinks );
                    			return true;
                    		}
                    

                    hier wir geprüft ob die statements URL und Text vorhanden sein ,die vom dem Object $navListe -> addLinks abgeholt habe .

                    Wenn ja , mit array_push( $this -> arLinks, $arNewLinks ); wird die Eingenschaft $arNewLinks auf der Array arLinks sich adderiert...

                    if ( is_array ( $arNewLinks ) ) {
                    			foreach ( $arNewLinks as $NewLink ) {
                    				if ( isset( $NewLink['URL'] ) && isset( $NewLink['TEXT'] ) ) {
                    					array_push( $this -> arLinks, $NewLink );
                    				}               
                    			}
                    

                    hier if ( is_array ( $arNewLinks ) ) { wird gefragt ob $arNewLinks ein Array ist .

                    Mit foreach ( $arNewLinks as $NewLink ) { iterieren der Array $arNewLinks .

                    Mit if ( isset( $NewLink['URL'] ) && isset( $NewLink['TEXT'] ) ) { ,prüft ob ob die statements URL und Text vorhanden sein .Wenn ja,

                    Mit array_push ( $this -> arLinks, $NewLink ); adderiert der neue Element $NewLink an dem Array .

                    1. Liebe(r) liebewinter,

                      Mit $this -> arLinks = []; baut ein Leer Array um später mit array_push sich adderiert , wie hier sagt.....

                      richtig.

                      if ( isset( $arNewLinks['URL'] ) && isset( $arNewLinks['TEXT'] ) ) {     
                      			array_push( $this -> arLinks, $arNewLinks );
                      			return true;
                      		}
                      

                      hier wir geprüft ob die statements URL und Text vorhanden sein ,die vom dem Object $navListe -> addLinks abgeholt habe .

                      Das hast Du richtig verstanden. Allerdings sind URL und TEXT keine "statements", sondern Schlüssel (oder "keys"), unter deren Namen in einem Array ein Wert gespeichert sein soll:

                      $beispiel = array(
                        'URL' => 'https://selfhtml.org',
                        'TEXT' => 'SELFHTML'
                      );
                      
                      isset($beispiel['URL']); // true
                      isset($beispiel['TEXT']); // true
                      isset($beispiel['Selfhtml']); // false, weil kein
                      // solcher Schlüssel in $beispiel existiert
                      

                      Es wird in meinem Beispiel-Code auf die Existenz der Schlüssel URL, TEXT und Selfhtml geprüft.

                      Wenn ja , mit array_push( $this -> arLinks, $arNewLinks ); wird die Eingenschaft $arNewLinks auf der Array arLinks sich adderiert...

                      Fast richtig. Wenn ja, dann werden die Inhalte des Arrays mit dem Variablennamen $arNewLinks in dem Objekt (vom Typ NavigationLinkList) in dessen Eigenschaft $arLinks (vom Typ Array) gespeichert.

                      hier if ( is_array ( $arNewLinks ) ) { wird gefragt ob $arNewLinks ein Array ist .

                      Richtig.

                      Mit foreach ( $arNewLinks as $NewLink ) { iterieren der Array $arNewLinks .

                      Ja, es wird der Wert jedes Eintrags verarbeitet. Für die Verarbeitung wird er vorübergehend in der Variable $NewLink abgelegt.

                      Mit if ( isset( $NewLink['URL'] ) && isset( $NewLink['TEXT'] ) ) { ,prüft ob ob die statements URL und Text vorhanden sein.

                      Ob die Schlüssel existieren, ja.

                      Mit array_push ( $this -> arLinks, $NewLink ); adderiert der neue Element $NewLink an dem Array .

                      Ja, $this->arLinks, also die Objekteigenschaft arLinks bekommt das Array, das in $NewLink steht, als neuen Eintrag hinzugefügt.

                      Liebe Grüße,

                      Felix Riesterer.

                      1. vieleeeeeeen danke für deine Korrektur !

                        ich wünsche dir eine schöne und gedeihliche Jahr !

                      2. ursus contionabundo sagt hier

                        Das Objekt erzeuge, dann wird __construct() ausgeführt. Übergebe ich dabei keine Arrays, dann wäre das ohne ( $arNewLinks = false ) ein Fehler.

                        Durch den kleinen Trick kann ich mir aussuchen, ob ich die Liste schon beim Erzeugen angebe oder später alle Links einzeln oder alle auf einmal.

                        aber der Array sind schon da…

                        $navListe -> addLinks( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] );
                        $navListe -> addLinks( [ 'URL' => '/provee/page_2.php', 'TEXT' => '2' ] );
                        

                        was drienen von den eckige klammern stehen....wie ich verstehe , Array wird mit eckige klammern gebaut...oder hier wird ein List erzeugt ??

                        1. Liebe(r) liebewinter,

                          aber der Array sind schon da…

                          wir müssen genau sagen, mit welchem Code wir arbeiten. Ich vermute, Du beziehst Dich auf den Code der Klasse NavigationLinkList, den Du hier zitiert hast. Dort steht:

                          public function __construct( $arNewLinks = false ) {
                            $this -> arLinks = []; 
                            $this -> addLinks ( $arNewLinks );
                            $this -> current_page = $_SERVER['PHP_SELF'];
                          }
                          

                          Es wird also im Konstruktor sichergestellt, dass $this->arLinks tatsächlich ein Array ist. Und leer.

                          $navListe -> addLinks( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] );
                          $navListe -> addLinks( [ 'URL' => '/provee/page_2.php', 'TEXT' => '2' ] );
                          

                          Dieser Code fügt zwei Links in das Array ein. Die Schreibweise
                          [ 'key' => 'value' ] ist kurz für
                          array( 'key' => 'value' ).

                          Vielleicht war für Dich verwirrend, dass die Werte im Array $arLinks ebenfalls Arrays sind?

                          was drienen von den eckige klammern stehen....wie ich verstehe , Array wird mit eckige klammern gebaut...oder hier wird ein List erzeugt ??

                          Richtig. Ins Array $arLinks werden Arrays eingefügt, die zwei Schlüssel (URL und TEXT) haben.

                          Liebe Grüße,

                          Felix Riesterer.

                          1. danke für deine Anwort !

                            wir müssen genau sagen, mit welchem Code wir arbeiten. Ich vermute, Du beziehst Dich auf den Code der Klasse NavigationLinkList, den Du hier zitiert hast.

                            ja , dieses ist der Code…

                            Es wird also im Konstruktor sichergestellt, dass $this->arLinks tatsächlich ein Array ist. Und leer

                            ich weiss , mit $this -> arLinks = []; , wird ein Leer Array gebaut , mit dem eckige Klammer , []..

                            aber wenn

                            
                                $navListe -> addLinks( [ 'URL' => '/provee/page_1.php', 'TEXT' => '1' ] );
                                $navListe -> addLinks( [ 'URL' => '/provee/page_2.php', 'TEXT' => '2' ] );
                            
                            

                            Array sind , warum ursus contionabundo sagt ;

                            Das Objekt erzeuge, dann wird __construct() ausgeführt. Übergebe ich dabei keine Arrays, dann wäre das ohne ( $arNewLinks = false ) ein Fehler.

                            wie ich dieser satz verstehe ,wenn keine Array wäre ,brauchte ( $arNewLinks = false ) um eine fehler zu verhindert…

                            aber der Arrays sind schon da , die eckige Klammer.. , deshalb verstehe nicht warum brauche ich ( $arNewLinks = false )

                            1. Liebe(r) liebewinter,

                              warum ursus contionabundo sagt ;

                              Das Objekt erzeuge, dann wird __construct() ausgeführt. Übergebe ich dabei keine Arrays, dann wäre das ohne ( $arNewLinks = false ) ein Fehler.

                              also gut. Dahinter steckt folgender Zusammenhang:

                              class A {
                                private $a;
                                public function __construct ($a) {
                                  $this->a = array();
                                  array_push($this->a, $a);
                                }
                              }
                              
                              class B {
                                private $b;
                                public function __construct ($b = false) {
                                  $this->b = array();
                              
                                  if ($b) {
                                    array_push($this->b, $b);
                                  }
                                }
                              }
                              
                              $a = new A(); // FEHLER weil kein Wert übergeben wurde (aber muss)
                              $b = new B(); // OK, ein Wert muss nicht übergeben werden (nutzt default)
                              

                              Jetzt klar?

                              Liebe Grüße,

                              Felix Riesterer.

                              1. sehrrrrrrr klar , danke !