Benutzer-Werkzeuge

Webseiten-Werkzeuge


becki:linux:php

Dies ist eine alte Version des Dokuments!


PHP

Server Setup

Variables

var Keyword

var was the keyword for defining a member variable within a class. Since php5 it should never appear anywhere.

Variable parsing

For hashtables use this syntax:

echo "A banana is {$fruits['banana']}.";

predefined stuff

Arrays

Making of

$fruits = array (
  "fruits"  => array ("a"=>"orange", "b"=>"banana", "c"=>"apple"),
  "numbers" => array (1, 2, 3, 4, 5, 6),
  "holes"   => array ("first", 5 => "second", "third")
);

Working with

foreach ($fruits as $fruit) {...}         // traverse the array
foreach ($fruits as $key => $fruit) {...} // same if indices are needed
$length= count($fruits); // get number of items
print_r($fruits);        // print content

Value in Stock?

Access to a nonexisting key generates a PHP notice. To prevent this, you can check before the access if the key exists or if the value is set. More

array_key_exists('key', $fruits)) // returns true if the key exists
isset($fruits['key']) // returns true if the key exists AND value != NULL

Copying, Passing and Returning

By default, arrays are copied by value (Unlike PHP objects and Java arrays and objects):

Assignment

$a=array(0);
 
$b= $a;  /* Deep copy: Assignment by value */
$b[0]= 1;
assert($a[0] == 0);
 
$c= &$a; /* Shallow copy: Assignment by reference */
$c[0]= 2;
assert($a[0] == 2);
$a[0]= 3;
assert($c[0] == 3);
 
$d= $c;  /* $c is not different from $a: Again assignment by value */
$d[0]= 4;
assert($a[0] == 3);
assert($c[0] == 3);

Passing to and returning from Functions

function f($v)  { $v[0]= 1; }
function g(&$w) { $w[0]= 2; }
function h(&$x) { $x[0]= 3; return $x; }
$a= array(0);
 
f($a);     /* pass-by-value */
assert($a[0] == 0);
 
f(&$a); /* Call-time pass-by-reference works, but is deprecated! */
assert($a[0] == 1);
 
g($a);     /* pass-by-reference */
assert($a[0] == 2);
 
$b= h($a);          /* return-by-reference seems to be default */
assert($a[0] == 3); /* (pass-by-reference just to make it verifiable) */

Passing Arrays to Arrays

$a= array(0);
$b= array('d'=> $a, 'e'=> &$a);
 
$a[0]= 1;
assert($b['d'][0] == 0);
assert($b['e'][0] == 1);

Passing Arrays to Objects

In order to really make an object work with a reference of an arry, you have to pass it by reference and to assign it to the member variable by reference:
class C {
    public function f(&$v) { $this->v=  $v; $this->v[0]= 1; }
    public function g(&$w) { $this->w= &$w; $this->w[0]= 2; }
}
$o= new C();
$a= array(0);
 
$o->f($a);
assert($a[0] == 0);
 
$o->g($a);
assert($a[0] == 2);

Objects

Copying

Objects are copied by „something like a reference“ more. This means the reference operator is not necessary for ojects (anlike PHP arrays)

FIXME Add some code to prove this.

Logging

Use error_log() for debug logging.

Command Line Usage

2004-02-13 14:45

Prerequisites

  • see also php-docu: capter „Using Php from the command line“
  • /usr/bin/php can be CLI- or CGI- Sapi; test it with „php -v“
  • Only If CGI:
    • Optin -qC is necessary in shebang; therefore use it BY DEFAULT! (-q suppresses header; -C keeps working dir)
    • set register_argc_argv = On in /etc/apache/php.ini

Command Line Arguments

#!/usr/bin/php
<?php
echo "argument count: ".$_SERVER['argc']."\n";
foreach ($_SERVER['argv'] as $name => $value) {
    echo "$name: $value\n";
}
?>

Script saved as tester and called with tester bee fly prints:

argument count: 3
0: /home/becki/bin/tester
1: bee
2: fly

argv[0] = name of script
Dont't use $arc and $argv, because they are not available under all circumstances!

Standard In- and Output

stdin

Read stdin line by line into the array lin:

char lin[MAX_LINE_LEN];
while (fgets(lin, MAX_LINE_LEN, stdin)) {/* do some thing */}

stdout, stderr

printf(); echo; // writing to stdout
;  // writing to stderr
error_log("Value $val"); // writing to System error log eg. /var/log/apache/error_log

Draft: Pages and Actions

FIXME Pre- and Postactions are probably obsolete. See http://skiclub-mitwitz.de/lib/libPage/

See also: Build your own MVC Framework

Pre-Actions

  1. Every page must have exactly 1 unique pre-action (prefix) which is used for building the page eg a database query
  2. Pages can only be accessed by their pre-actions not directly by other pages. If the page has no dynamic content, the pre-action just calls the page constructor or sets the $page global variable.
  3. Although different pages may require to do the same things in it's pre-actions do not use the same action, but let those actions call the same helper function. Thus the target page becomes clear.
  4. FIXME pre-action can change page by calling other pre-action

Post-Actions

  1. Each link or form of a page may be bound to exactly 1 unique post-action (suffix) eg a database update
  2. Post-actions may be followed by pre-actions (chaining of actions)
  3. Actions are named after the page they are bound to. To the name of pre-actions 'p_' is prepended and to post-actons (suffixes) 's_' is prepended
  4. Use a parameter called eg 'target' for (the pre-actions of) pages wich can be called by differnt other pages and have to jump back to ther calling pages after they are left.

Authentication

FIXME This section is in progress

Possible information ressources

To do

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
becki/linux/php.1291285431.txt.gz · Zuletzt geändert: 2010-12-02 10:23 von becki

Impressum - Datenschutzerklärung