Functions (PHP)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Simpel voorbeeld

Voorbeeld van een functie zonder retour-waardes (hoe noem je dat?):

<?php

function double_the_number($a)
{
	echo(2*$a);
}

double_the_number(4);

?>

Merk op:

  • Ook numerieke variabelen zijn strings
  • Zonder de aanroep (double_the_number(4);) wordt de functie niet uitgevoerd
  • De aanroep gaat zonder een keyword zoals call.

Return

Simpel voorbeeld:

<?php
function square($num)
{
    return $num * $num;
}
echo square(4);   // outputs '16'.
?>

Een functie kan niet meerdere waardes uitvoeren - Een array is daarvoor de gebruikelijke oplossing

Je kunt het datatype van de uitvoer specificeren:

<?php
function sum($a, $b): float 
{
    return $a + $b;
}

// Note that a float will be returned.
var_dump(sum(1, 2));
?>

Je kunt ook een object retourneren:

<?php
#
# Can I return a PDO-object from a funciton?
###################################################################
#
###############################################################
# Call wp-load.php
###############################################################
#
require_once("/home/strompf/www/rt.dvb/wp-load.php");

function create_pdo_object()
{

    ###############################################################
    # Connect with dwh through PDO
    ###############################################################
    #
    $servername = "localhost";
    $dbname = "example";
    $username = "supervrouw";
    $password = "invalid";

    try 
    {
    	# Instantiate a new PDO object
    	##############################
    	#
        $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", $username, $password);
        
        # set the PDO error mode to exception
        #####################################
        #
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully\n"; 
    }
    catch(PDOException $e)
    {
        echo "Connection failed: " . $e->getMessage()."\n";
    }

    return $conn; # TJAKKA!

}

$conn = create_pdo_object(); # WORKS!


    ###############################################################
    # Fetch & process table "product_tmp"
    ###############################################################
    #
    # Formulate query
    ###################################################
    #
    $sql = $conn->prepare("select * from product_tmp");

    # Execute query
    ###############
    #
    $sql->execute();

    # Fetch rows
    ############
    #
    $rows = $sql->fetchAll();

    print_r($rows);

    foreach ($rows as $row)
    {
        echo $row['sku']."\n";
    }

Scope

  • Variabelen zijn locaal
  • Objecten zijn ook locaal!

Vraagstukken

  • Hoe kun je binnen een functie een object instantiëren, die je daarbuiten ook kunt gebruiken? Iets met pass by reference?

Bronnen