PHP Conference Nagoya 2025

print

(PHP 4, PHP 5, PHP 7, PHP 8)

printAusgabe eines Strings

Beschreibung

print(string $expression): int

Gibt expression aus.

print ist keine Funktion, sondern ein Sprachkonstrukt. Sein Argument ist der Ausdruck, der auf das Schlüsselwort print folgt, und wird nicht durch Klammern abgegrenzt.

Der Hauptunterschied zu echo besteht darin, dass print nur ein einziges Argument entgegennimmt, und immer 1 zurückgibt.

Parameter-Liste

expression

Der Ausdruck, der ausgegeben werden soll. Nicht-String-Werte werden in Strings umgewandelt, auch wenn die Direktive strict_types aktiviert ist.

Rückgabewerte

Gibt immer 1 zurück.

Beispiele

Beispiel #1 print-Beispiele

<?php
print "print benötigt keine Klammern.";

// Es wird kein Zeilenumbruch oder Leerzeichen eingefügt; das Folgende gibt
// "HalloWelt" in einer Zeile aus
print "Hallo";
print
"Welt";

print
"Dieser String umfasst
mehrere Zeilen. Die Zeilenumbrüche
werden mit ausgegeben."
;

print
"Dieser String umfasst\nmehrere Zeilen. Die Zeilenumbrüche\nwerden mit ausgegeben.";

// Das Argument kann ein beliebiger Ausdruck sein, der einen String erzeugt
$foo = "ein Beispiel";
print
"foo ist $foo"; // foo ist ein Beispiel

$fruechte = ["Zitrone", "Orange", "Banane"];
print
implode(" und ", $fruechte); // Zitrone und Orange und Banane

// Nicht-String-Ausdrücke werden in String umgewandelt, auch wenn
// declare(strict_types=1) verwendet wird
print 6 * 7; // 42

// Da print einen Rückgabewert hat, kann es in Ausdrücken verwendet werden
// Das Folgende gibt "Hallo Welt" aus
if ( print "Hallo" ) {
echo
" Welt";
}

// Das Folgende gibt "wahr" aus
( 1 === 1 ) ? print 'wahr' : print 'falsch';
?>

Anmerkungen

Hinweis: Die Verwendung mit Klammern

Wenn das Argument in Klammern an print übergeben wird, löst das keinen Syntaxfehler aus und erzeugt eine Syntax, die wie ein normaler Funktionsaufruf aussieht. Dies kann jedoch irreführend sein, denn die Klammern sind tatsächlich Teil des auszugebenden Ausdrucks und nicht Teil der print-Syntax selbst.

<?php
print "Hallo";
// gibt "Hallo" aus

print("Hallo");
// gibt auch "Hallo" aus, weil ("Hallo") ein gültiger Ausdruck ist

print(1 + 2) * 3;
// gibt "9" aus; die Klammern bewirken, dass zuerst 1+2 ausgewertet wird, dann 3*3
// Die print-Anweisung sieht den gesamten Ausdruck als ein Argument

if ( print("Hallo") && false ) {
print
" - inside if";
}
else {
print
" - inside else";
}
// gibt " - inside if" aus
// Der Ausdruck ("Hallo") && false wird zuerst ausgewertet und ergibt false
// Dies wird in die leere Zeichenkette "" umgewandelt und gedruckt
// Das print-Konstrukt gibt dann 1 zurück, also wird der Code im if-Block ausgeführt
?>

Wenn print in einem größeren Ausdruck verwendet wird, könnte es nötig sein, sowohl das Schlüsselwort als auch sein Argument in Klammern zu setzen, um das gewünschte Ergebnis zu erhalten:

<?php
if ( (print "Hallo") && false ) {
print
" - inside if";
}
else {
print
" - inside else";
}
// gibt "Hallo - inside else" aus
// Im Gegensatz zum vorherigen Beispiel wird der Ausdruck (print "Hallo")
// zuerst ausgewertet
// Nach der Ausgabe von "Hallo" gibt print 1 zurück
// Da 1 && false falsch ist, wird der Code im else-Block ausgeführt

print "Hallo " && print "Welt";
// gibt "Welt1" aus; print "Welt" wird zuerst ausgewertet,
// dann wird der Ausdruck "Hallo " && 1 an den linken print übergeben

(print "Hallo ") && (print "Welt");
// gibt "Hallo Welt" aus; die Klammern erzwingen, dass die print-Ausdrücke
// vor dem && ausgewertet werden.
?>

Hinweis: Da dies ein Sprachkonstrukt und keine Funktion ist, können Sie dieses nicht mit Variablenfunktionen oder benannten Parametern verwenden.

Siehe auch

add a note

User Contributed Notes 3 notes

up
31
user at example dot net
16 years ago
Be careful when using print. Since print is a language construct and not a function, the parentheses around the argument is not required.
In fact, using parentheses can cause confusion with the syntax of a function and SHOULD be omited.

Most would expect the following behavior:
<?php
if (print("foo") && print("bar")) {
// "foo" and "bar" had been printed
}
?>

But since the parenthesis around the argument are not required, they are interpretet as part of the argument.
This means that the argument of the first print is

("foo") && print("bar")

and the argument of the second print is just

("bar")

For the expected behavior of the first example, you need to write:
<?php
if ((print "foo") && (print "bar")) {
// "foo" and "bar" had been printed
}
?>
up
14
danielxmorris @ gmail dotcom
16 years ago
I wrote a println function that determines whether a \n or a <br /> should be appended to the line depending on whether it's being executed in a shell or a browser window. People have probably thought of this before but I thought I'd post it anyway - it may help a couple of people.

<?php
function println ($string_message) {
$_SERVER['SERVER_PROTOCOL'] ? print "$string_message<br />" : print "$string_message\n";
}
?>

Examples:

Running in a browser:

<?php println ("Hello, world!"); ?>
Output: Hello, world!<br />

Running in a shell:

<?php println ("Hello, world!"); ?>
Output: Hello, world!\n
up
2
mark at manngo dot net
1 year ago
The other major difference with echo is that print returns a value, even it’s always 1.

That might not look like much, but you can use print in another expression. Here are some examples:

<?php
rand
(0,1) ? print 'Hello' : print 'goodbye';
print
PHP_EOL;
print
'Hello ' and print 'goodbye';
print
PHP_EOL;
rand(0,1) or print 'whatever';
?>

Here’s a more serious example:

<?php
function test() {
return !!
rand(0,1);
}
test() or print 'failed';
?>
To Top