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 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
=== ) ? 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(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 verwenden.

Siehe auch

add a note add a note

User Contributed Notes 9 notes

up
30
user at example dot net
15 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
15
danielxmorris @ gmail dotcom
15 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
4
jon
16 years ago
the FAQTs article can be found archived at http://web.archive.org/web/20060601063513/http
://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40

(url split to get past the line-length limitation)
up
1
Chris Watson
14 years ago
mvpetrovich of 2007 could just use single quotes as his string delimiters (see the example in the current documentation).
It's not ALWAYS appropriate, but generally it is best (the Zend Framework coding standards have a good take on this). It yields a number of interesting benefits:
1: Nobody will be tempted to write functions to replace backticks or other characters with double quotes. Such functions may cause a (negligible) loss of efficiency, and maybe other undesired effects.
2: You will be able to use double quotes without escaping. This is recommended (although not required) for HTML and XML attributes, as well as quoted text.
3: The script will hit the browser very slightly slightly faster since PHP doesn't have to scan through the string looking for variables, escaped characters, curly braces or other things.
4: Your code gets ten times easier to read. (as mvpetrovich pointed out)

If, in spite of these four excellent benefits, you really MUST still use double quotes to delimit boring old string constants (and seriously, why would you?), you could use the slightly less favourable single quotes as delimiters for most markup languages.
HTML served as HTML will even let you lay out unquoted attributes (yuck).

It should also be noted though that if you are just printing bare strings, you may as well shut off the php parser. The quickest way to send a string is to write it as plain text, OUTSIDE of the php tags. This will also make your code look excellent in a lot of syntax highlighters.

There are few disadvantages to doing this, if any. Output buffering still works. All your classes and objects and includes remain in place. Your script runs faster. World peace is obtained.
up
0
jon at tap dot net
18 years ago
I have a small utility run from the command line that processes a potentially huge list of files. As it can take hours to complete, I stuck a 

print '.';

statement in the body of the main loop to prove that something was  happening.

For reasons unknown to me, the utiliity suddenly started buffering the output such that it printed nothing until completion, defeating the purpose of the running monitor. Adding flush() statements did nothing. The problem was solved by using

fputs(STDOUT, '.');

but I have no idea why.
up
-1
dkrupyanskiy
6 years ago
Don't rely on parenthesis used for `print` construct:

print 1 . print(2) + 3;
print PHP_EOL;
print 1 . (print(2)) + 3;
up
-2
phpnet at i3x171um dot com
17 years ago
I have written a script to benchmark the several methods of outputting data in PHP: via single quotes, double quotes, heredoc, and printf. The script constructs a paragraph of text with each method. It performs this construction 10,000 times, then records how long it took. In total, it prints 160,000 times and records 16 timings. Here are the raw results.

Outputted straight to browser--

Single quotes: 2,813 ms
...with concatenation: 1,179 ms
Double quotes: 5,180 ms
...with concatenation: 3,937 ms
heredoc: 7,300 ms
...with concatenation: 6,288 ms
printf: 9,527 ms
...with concatenation: 8,564 ms

Outputted to the output buffer--

Single quotes: 8 ms
...with concatenation: 38 ms
Double quotes: 8 ms
...with concatenation: 47 ms
heredoc: 17 ms
...with concatenation: 49 ms
printf: 54 ms
...with concatenation: 52 ms

A nice graph of the script's output can be found here:
http://i3x171um.com/output_benchmarks/ob.gif

So what should you choose to print your text? I found several things out writing this.

First, it should be noted that the print and echo keywords are interchangeable, performance-wise. The timings show that one is probably an alias for the other. So use whichever you feel most comfortable with.

Second, if you've ever wondered which was better, the definitive answer is single quotes. Single quotes are at least four times faster in any situation. Double quotes, while more convenient, do pose a debatably significant performance issue when outputting massive amounts of data.

Third, stay away from heredoc, and absolutely stay away from [s]printf. They're slow, and the alternatives are there.

The source of my script can be found here:
http://i3x171um.com/output_benchmarks/ob.txt

DO NOT RUN THE SCRIPT ON THE INTERNET! Run it instead from localhost. The script outputs ~45 megabytes of text in an html comment at the top of the page by default. Expect the benchmark to take ~45 seconds. If this is too long, you can change the amount of iterations to a lower number (the results scale accurately down to about 1,000 iterations).
up
-4
ejallison at gmail dot com
18 years ago
This is a simple function for printing debug comments that I didn't think of for a long time. Maybe it'll serve you good too.

<?php

function printd($str) {
  if (
$debug) { echo $str; }
}

// ...

if ($valueCalculatedEarlierInTheScript == 3) {
 
doSomethingWithNoOutput();
 
printd("doSomethingWithNoOutput() has executed.");
}

?>

It's mostly just to make sure everything is running without having to go through everything and put in echo "Step #whatever has executed" whenever something mysterious isn't working.
up
-7
http://www.danielxmorris.com
15 years ago
An update to the println function I wrote below, this is a more efficient, correct and returns a value (1, always; (print)).

<?php

   
function println($string_message = '') {
        return isset(
$_SERVER['SERVER_PROTOCOL']) ? print "$string_message<br />" . PHP_EOL:
          print
$string_message . PHP_EOL;
    }

?>
To Top