Frage zu "THIS_SCRIPT"

Alice

Erfahrenes Mitglied
Hallo.

Ich optmiere aktuell meine Webseite (SEO) und hänge bei folgendem Problem fest.

PHP:
if (THIS_SCRIPT == 'index')
{
   $keywords = '<meta name="keywords" content="blablabla" />';
   $description = '<meta name="description" content="blablabla" />';
}

if (THIS_SCRIPT == 'impressum')
{
   $keywords = '<meta name="keywords" content="blablabla" />';
   $description = '<meta name="description" content="blablabla" />';
}

if (THIS_SCRIPT == 'kontakt')
{
   $keywords = '<meta name="keywords" content="blablabla" />';
   $description = '<meta name="description" content="blablabla" />';
}

Aber was ist mit Seiten die ich nicht gezielt angegeben habe? Wie kann ich das ohne "else" lösen?
 
THIS_SCRIPT ist ein define? Vermutlich.

Da defines php-intern auch als zval's behandelt werden (siehe Zend/zend_builtin_functions.c => ZEND_FUNCTION(define)), kann man sie mit switch() prüfen, wie das folgende Beispiel zeigt:

PHP:
<?php
define('foo', 'bar');

switch(foo)
{
	case 'bar':
		echo 'bar';
		break;
		
	case 'baz':
		echo 'baz';
		break;
		
	case 'blub':
		echo 'blub';
		break;
		
	default:
		echo 'none of them';
		break;
}

EDITh meint, dass der Code-Block in deinen else-Bodies immer der gleiche ist, und du deshalb deine if-Condition mit OR verknüpfen und damit auf else verzichten kannst.

Wie schon geschrieben, defines sind intern zvals und können bei Prüfungen wie Variablen behandelt werden.

EDITh2 meint erneut, dass wenn du Ausnahmen hast, die nicht unter die Kategorien fallen, die du schon fest definiert hast, du um ein else nicht herum kommst. Du kannst es natürlich mit fall-through und default in einer switch-case lösen. Ungefähr so:

PHP:
switch(THIS_SCRIPT)
{
  case 'index':
  case 'impressum':
  case 'kontakt':
    /* was passieren soll, wenn THIS_SCRIPT mit bekannten String belegt ist */
  break;

  default:
    /* Alle anderen Fälle */
    break;
}
 
Zuletzt bearbeitet:
Das letzte Beispiel interessiert mich.

PHP:
switch(THIS_SCRIPT)
{
  case 'index':
  case 'impressum':
  case 'kontakt':
    /* was passieren soll, wenn THIS_SCRIPT mit bekannten String belegt ist */
  break;
 
  default:
    /* Alle anderen Fälle */
    break;
}

Nur habe ich noch eine AND Bedienung. Wie kann ich das noch in dein Beispiel einbauen?

PHP:
if (THIS_SCRIPT == 'forumdisplay' AND $forumid == '1')
{
   ...
}
 
Da hat sheel recht, da brauchts wieder if's. Man kann es aber auch kombinieren. Kommt darauf an, ob man das schön, praktisch oder sonst was findet, aber so ist es möglich:

PHP:
<?php
//define('THIS_SCRIPT', 'forumdisplay');
define('THIS_SCRIPT', 'index');
//define('THIS_SCRIPT', 'nix');

$forumid = 1;
//$forumid = 5;

switch(THIS_SCRIPT)
{
  case 'forumdisplay':
    if($forumid == '1')
    {
      echo "Forum mit ID 1";
      break;
    }
  case 'index':
  case 'impressum':
  case 'kontakt':
    echo "Definierter Kram";
    break;

  default:
    echo "alles andere";
    break;
}
 
Wie muss es denn aussehen wenn index, impressum, kontakt usw. alle andere Ausgaben haben? Einfach die Ausgabe unter dem case setzen?

PHP:
switch(THIS_SCRIPT)
{
   case 'forumdisplay':
      if($forumid == '1')
      {
         echo "Forum mit ID 1";
         break;
      }
   case 'index':
      echo "Definierter Kram";
      break;
   case 'impressum':
      echo "Definierter Kram";
      break;
   case 'kontakt':
      echo "Definierter Kram";
      break;
 
   default:
      echo "alles andere";
      break;
}

So?
 
Genau so ist es. Da wo identische Ausgaben gemacht werden, kann man ein fall-through (oder vielerorts auch fallthru) notieren. Ansonsten mit break; den case abschließen. Dann werden die anderen Fälle nicht berücksichtigt.
 
Das findest du raus, wenn du es misst ;-) microtime() für schnelle Prüfungen können helfen oder du verwendest xdebug (schamlose Eigenwerbung).

Ich will dich noch darauf aufmerksam machen, das im Falle 'forumdisplay' der break im Code-Block der if-Condition ist, und somit nur ausgeführt wird, wenn die Kondition erfüllt ist. Ansonsten findet ein fallthru statt.
 
Heisst das wenn "forumdisplay" nicht erfüllt ist, die ganzen IF-Abfragen nicht geprüft/verarbeitet werden? Das wäre sehr gut!
 
Zurück