Τύποι Δεδομένων

Πριν ξεκινήσουμε την κατασκευή του πρώτου μας προγράμματος, καλό είναι να γνωρίζουμε ορισμένα βασικά στοιχεία του προγραμματισμού. Αρχικά θα δούμε τους τύπους δεδομένων. Οι τύποι δεδομένων διακρίνονται σε χαρακτήρες, λέξεις, αριθμούς ακέραιους, δεκαδικούς κλπ. Οι τύποι δεδομένων είναι χρήσιμοι γιατί θα ενημερώνουμε την γλώσσα προγραμματισμού για τον τύπο δεδομένων που θα χρησιμοποιήσουμε.

Οι τύποι δεδομένων στην php είναι οι:

  • Integer: Ακέραιοι αριθμοί
  • Float: Δεκαδικοί αριθμοί, επίσης ονομάζονται και double
  • String: Αλφαριθμητικά (κοινοί χαρακτήρες)
  • Boolean: Δέχονται μόνο δύο τιμές true ή false (αληθές ή ψευδές)
  • Array: Πίνακες
  • Object: Αντικείμενα στον αντικειμενοστρεφή προγραμματισμό (Object Oriented)
  • NULL: Είναι ένας ειδικός τύπος που δηλώνει το κενό το τίποτα.

Αριθμοί

Οι αριθμοί στην php όπως και στις περισσότερες γλώσσες προγραμματισμού, έχουν συγκεκριμένους τύπους όπως για παράδειγμα ακέραιοι (integers) και δεκαδικοί (double).

Παράδειγμα ακέραιων: 1, 2, 3, 50, 10, 4345098098

Παράδειγμα δεδκαδικών: 1.2345, 2345.4267, 98.2234

Αυτονόητο είναι ότι στον προγραμματισμό, τους τύπους αριθμών τους χρησιμοποιούμε για αριθμητικές πράξεις. Για αυτό τον λόγο υπάρχει ο διαχωρισμός μεταξύ αλφαριθμητικών (απλοί χαρακτήρες) και αριθμών (για αριθμητικές πράξεις). Για παράδειγμα, εάν δηλώναμε ως τύπο δεδομένων έναν ταχυδρομικό κώδικα ως τι θα τον ορίζαμε, ως αλφαριθμητικό ή ως αριθμό; Σκεφθείτε λίγο… Άντε να το πάρει το ποτάμι, θα το δηλώναμε ως αλφαριθμητικό. Και γιατί είναι αλφαριθμητικό εφόσον ο ταχυδρομικός κώδικας αποτελείται μόνο από αριθμούς; Γιατί πολύ απλά δεν πρόκειται ποτέ να εκτελέσουμε μαθηματική πράξη π.χ. πρόσθεση μεταξύ δύο ταχυδρομικών κωδικών. Για αυτό τον λόγο δηλώνεται ως αλφαριθμητικό. Τα καλά νέα όμως είναι οτι στην PHP δεν χρειάζεται να δηλώνετε εσείς τους τύπους των μεταβλητών γιατί η PHP αυτόματα το κάνει αυτό για εσάς.

Ακέραιοι (Integers)

Για παράδειγμα, παρακάτω βλέπουμε πως μπορούμε να δηλώσουμε μια μεταβλητή τύπου Integer. Με την εντολή var_dump μπορούμε να δούμε τον τύπο της μεταβλητής και την τιμή της:

Παράδειγμα:

<?php
$x = 3241;
var_dump($x);
?> 

Αποτέλεσμα:

int(3241)

Δεκαδικοί (Float)

Παρακάτω θα δούμε πως μπορούμε να δηλώσουμε μια μεταβλητή δεκαδικών. Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε ξανά την εντολή var_dumpQ

Παράδειγμα:

 <?php
$x = 10.125;
var_dump($x);
?> 

Αποτέλεσμα:

float(10.125)

Αλφαριθμητικά (Strings)

Αλφαριθμητικό ή αλλιώς strings είναι μια αλληλουχία χαρακτήρων και αριθμών οι οποίοι αναγνωρίζονται από τον Η/Υ ως απλοί χαρακτήρες (ακόμα και αν είναι αριθμοί όπως αναφέραμε προηγουμένως).

Πάμε να δούμε λοιπόν τί είναι το string με το παρακάτω παράδειγμα παίζοντας με την εντολή echo. Αυτό που θα κάνουμε είναι να εμφανίσουμε ένα μήνυμα στην οθόνη του Η/Υ γράφοντας την παρακάτω γραμμή κώδικα:

echo "Γεια σας, η ηλικία μου είναι 34 ετών";

Αποτέλεσμα:

Γεια σας, η ηλικία μου είναι 34 ετών

Το παραπάνω μήνυμα είναι μια αλληλουχία αλφαριθμητικών χαρακτήρων. Για την ακρίβεια είναι μια ομάδα χαρακτήρων σε σειρά στην μνήμη του Η/Υ. Συγκεκριμένα στη μνήμη του Η/Υ το παραπάνω αλφαριθμητικό είναι κάπως έτσι:

Γ ε ι α σ α ς , η η λ ι κ ί α ε τ ώ ν

Το κάθε τετραγωνάκι απεικονίζει θέσεις στη μνήμη του Η/Υ και έχει μια συγκεκριμένη διεύθυνση ώστε να γνωρίζει ο Η/Υ πού θα αναζητήσει τους χαρακτήρες οι οποίοι όλοι μαζί αποτελούν την πρότασή μας ή πιο συγκεκριμένα το αλφαριθμητικό μας (string).

Ακόμα και ο αριθμός 34 ενώ είναι αριθμός, ο Η/Υ τον αντιλαμβάνεται ως δύο απλούς χαρακτήρες 3 και 4, και όχι ως αριθμό 34. Συνεπώς τα αλφαριθμητικά τα χρησιμοποιούμε στον προγραμματισμό όταν θέλουμε να επεξεργαστούμε δεδομένα χαρακτήρων.

Συγκεκριμένα, εάν θέλουμε να εμφανίσουμε ένα μήνυμα στην οθόνη, ή εάν θέλουμε να εισάγουμε κάποια δεδομένα από το πληκτρολόγιο όπως π.χ. όνομα, επώνυμο, τηλέφωνο κλπ. τότε χρησιμοποιούμε αλφαριθμητικά.

Αλληλουχία αλφαριθμητικών (string concatenation)

Η Αλληλουχία Αλφαριθμητικών πρόκειται για πρόσθεση χαρακτήρων ή για να το πούμε πιο συγκεκριμένα ένωση ομάδων χαρακτήρων χρησιμοποιώντας την τελεία (.) για την ένωση. Για παράδειγμα έστω ότι έχουμε δυο ομάδες χαρακτήρων και θέλουμε να τις ενώσουμε. Τότε αυτό πραγματοποιείται κάπως έτσι:

echo "Γεια σας, η ηλικία μου είναι " . "34 ετών!";

Εάν εκτελέσουμε την παραπάνω γραμμή στην php με την εντολή echo, τότε θα μας εμφανιστεί το παρακάτω μήνυμα:

Γεια σας, η ηλικία μου είναι 34 ετών!

Για να παίξουμε λίγο τώρα. Σε περίπτωση που γράψω:

echo "1" . "1";

Ποιο θα είναι το αποτέλεσμα; Σωστά μαντέψατε, θα είναι:

11

Αυτό συμβαίνει γιατί πολύ απλά οτιδήποτε βρίσκεται εντός των εισαγωγικών “”, η php το λαμβάνει ως χαρακτήρα και όχι ως αριθμό. Eάν θέλαμε να γίνει αριθμητική πράξη, τότε θα έπρεπε οι αριθμοί να γραφτούν χωρίς εισαγωγικά όπως είδαμε πιο πάνω, π.χ. 1+1, με αποτέλεσμα 2.

Συναρτήσεις Strings

Όπως είδαμε παραπάνω, ένα αλφαριθμητικό (string) αποτελείται από μια αλληλουχία χαρακτήρων που αποθηκεύονται στη μνήμη του Η/Υ. Παρακάτω θα δούμε ορισμένες πολύ χρήσιμες συναρτήσεις της PHP. Υπάρχουν σαφώς πολλές περισσότερες συναρτήσεις τις οποίες μπορείτε να μελετήσετε σε αυτή την διεύθυνση: https://www.php.net/manual/en/ref.strings.php

strlen()

Επιστρέφει το μέγεθος του αλφαριθμητικού.

Παράδειγμα:

<?php
echo strlen("Hello world!"); // outputs 12
?> 

Αποτέλεσμα:

12

Ακολουθεί ένα παράδειγμα PHP που χρησιμοποιεί το stdin για να διαβάσει μια συμβολοσειρά εισόδου χρήστη και στη συνέχεια υπολογίζει το μήκος της χρησιμοποιώντας τη συνάρτηση strlen:

<?php

echo "Enter a string: ";
$line = fgets(STDIN);

// Remove trailing newline character, if any
$line = rtrim($line);

$length = strlen($line);

echo "The length of the string is: $length characters\n";

Σε αυτό το παράδειγμα:

  1. Το σενάριο ζητά από το χρήστη να εισαγάγει μια συμβολοσειρά χρησιμοποιώντας echo.
  2. Χρησιμοποιεί fgets(STDIN) για να διαβάσει τη συμβολοσειρά εισόδου από την είσοδο (stdin).
  3. H rtrim χρησιμοποιείται για την αφαίρεση τυχόν χαρακτήρων νέας γραμμής (εάν υπάρχουν) από την είσοδο.
  4. Η συνάρτηση strlen χρησιμοποιείται για τον υπολογισμό του μήκους της συμβολοσειράς εισόδου.
  5. Τέλος, εμφανίζει το μήκος της συμβολοσειράς στον χρήστη.

strpos()

Αναζητεί ένα συγκεκριμένο text μέσα σε ένα string. Σε περίπτωση που το εντοπίσει, τότε επιστρέφει την θέση που βρίσκεται το text μέσα στο string. Σε περίπτωση όμως που δεν εντοπιστεί το text, τότε η strpos() επιστρέφει FALSE.

Παράδειγμα:

<?php
echo strpos("Hello world!", "world"); // outputs 6
?> 

Αποτέλεσμα:

6

Σημείωση: Ο πρώτος χαρακτήρας θέσης στο string είναι το 0 και οχι το 1.

str_replace()

Αντικαθιστά ένα text με ένα άλλο text μέσα σε ένα string.

Παράδειγμα:

<?php
echo str_replace("world", "Dolly", "Hello world!"); // outputs Hello Dolly!
?> 

Αποτέλεσμα:

Hello Dolly!

strstr()

Αναζητεί ένα συγκεκριμένο text μέσα σε ένα string και εφόσον το εντοπίσει επιστρέφει το υπόλοιπο text απο το σημείο που εντοπίστηκε το text της αναζήτησης.

Παράδειγμα:

<?php
echo strstr("Hello world!","ell");
?>

Αποτέλεσμα:

ello world!

trim()

Διαγράφει αλφαριθμητικό ξεκινώντας απο την αρχή του string. Όσους χαρακτήρες δηλώσουμε στην 2η παράμετρο της trim() τόσους θα διαγράψει από το string.

Παράδειγμα:

<!DOCTYPE html>
<html>
<body>

<?php
$str = "Hello World!";
echo $str . "<br>";
echo trim($str,"Hed!");
?>

</body>
</html>

Αποτέλεσμα:

Hello World!
llo Worl 

ltrim()

Η ltrim() είναι η left trim και διαγράφει αλφαριθμητικό ξεκινώντας απο την αρχή του string (από αριστερά).

<!DOCTYPE html>
<html>
<body>

<?php
$str = "Hello World!";
echo $str . "<br>";
echo ltrim($str,"Hello");
?> 

</body>
</html>

Αποτέλεσμα:

Hello World!
World! 

rtrim()

Η rtrim() είναι η right trim και διαγράφει αλφαριθμητικό ξεκινώντας απο το τέλος του string (από δεξιά).

<?php
$str = "Hello World!";
echo $str . "<br>";
echo rtrim($str,"World!");
?>

Αποτέλεσμα:

Hello World!
Hello 

strtoupper()

Μετατρέπει όλους τους χαρακτήρες του string σε κεφαλαία.

Παράδειγμα:

<?php
echo strtoupper("Hello WORLD!");
?> 

Αποτέλεσμα:

HELLO WORLD!

Boolean

Ο συγκεκριμένος τύπος boolean είναι ιδιαίτερος γιατί δέχεται μόνο δύο τιμές TRUE (αληθές) ή FALSE (ψευδές). Χρησιμοποιείται σαν “διακόπτης” στα προγράμματα που θα δούμε και θα φτιάξουμε στη συνέχεια. Για να το κάνουμε ακόμα πιο κατανοητό, οι τύποι boolean αντιπροσωπεύουν τις τιμές ΝΑΙ και ΟΧΙ. Είναι σαν να θέτουμε το ερώτημα “η θερμοκρασία είναι μεγαλύτερη από 0 βαθμούς Κελσίου;” Εαν είναι αληθές τότε η μεταβλητή μας θα πάρει την τιμή true διαφορετικά θα πάρει την τιμή false. Πάμε να δούμε στην πράξη με το παρακάτω παράδειγμα κώδικα:

<?php

$temperature = 41; // Αρχικοποίηση της temperature.

if($temperature > 40) // Έλεγχος αν είναι η temperature μεγαλύτερη από 40
{
    $hot = true;  //Η $hot είναι τύπου boolean
}
else
{
    $hot = false;
}


if($hot)   // Έλεγος αν είναι true ή false.
    echo "The weather is hot!";  // Αν είναι true, θα εκτελεστεί αυτή η γραμμή.
else
    echo "The weather isn't hot!";  // Αν είναι false, θα εκτελεστεί αυτή η γραμμή.
?>

Array (Πίνακες)

Ένας πίνακας αποθηκεύει πολλαπλές τιμές δηλώνοντας μια μεταβλητή. Στο παρακάτω παράδειγμα δημιουργούμε έναν πίνακα (array) με όνομα $cars. Χρησιμοποιώντας την συνάρτηση της php var_dump() θα μας επιστρέψει τον τύπο της μεταβλητής και τις τιμές που περιέχει:

Παράδειγμα:

<?php
$cars = array("Volvo", "BMW", "Toyota");

var_dump($cars);
?> 

Αποτέλεσμα:

array(3) {
  [0]=>
  string(5) "Volvo"
  [1]=>
  string(3) "BMW"
  [2]=>
  string(6) "Toyota"
}

Στα Arrays επειδή δουλεύουμε με θέσεις στη μνήμη, πάντα ξεκινάμε να μετράμε από το 0. Στο παραπάνω παράδειγμα, η πρώτη τιμή που έχει καταχωρηθεί στο array $cars βρίσκεται στη θέση 0 του $cars και είναι η “vovlo”. Περισσότερα σχετικά με τους πίνακες θα δούμε σε ξεχωριστό κεφάλαιο.

Object (Αντικείμενο)

Τα Objects θα τα δούμε καλύτερα στο κεφάλαιο για τον Αντικειμενοστρεφή Προγραμματισμό (Object-Oriented Programming). Σε γενικές γραμμές οι Classes και τα Objects είναι δύο τεχνικές που χρησιμοποιούνται στον Αντικειμενοστρεφή Προγραμματισμό.

Ένα object δημιουργείται κληρονομώντας τα χαρακτηριστικά μιας κλάσης. Όταν δημιουργούμε μια κλάση, σε αυτήν ορίζουμε τα properties που είναι οι μεταβλητές της και την συμπεριφορά της κλάσης που είναι οι συναρτήσεις της (functions).

Συνεπώς, εαν θέλουμε να δημιουργήσουμε αντικείμενα που είναι π.χ. αυτοκίνητα, τότε θα πρέπει να σκεφθούμε τα χαρακτηριστικά των αυτοκινήτων που θα αποθηκεύουμε, καθώς και τις ενέργειες (functions) που θα κάνει αυτή η κλάση. Για τα αυτοκίνητα ορισμένα απο τα χαρακτηριστικά τους είναι το χρώμα και το μοντέλο. Ας δημιουργήσουμε την κλάση Car και τα properties της $color και $model.

Στη συνέχεια θα δημιουργήσουμε τα αντικείμενα (objects) για τα αυτοκίνητα Volvo, BMW κλπ.

Η __construct() είναι μια ειδική συνάρτηση της php η οποία εκτελείται αυτόματα όταν δημιουργείται ένα νέο αντικείμενο.

Η συνάρτηση message() της κλάσης Car, τυπώνει ένα μήνυμα στην οθόνη με τα περιεχόμενα των properties που έχουν αποθηκευθεί στο αντικείμενο που έχουμε δημιουργήσει.

Παράδειγμα:

<?php
class Car 
{
  public $color;
  public $model;
  
  public function __construct($color, $model) 
  {
    $this->color = $color;
    $this->model = $model;
  }
  
  public function message() 
  {
    return "My car is a " . $this->color . " " . $this->model . "!";
  }
}

$myCar = new Car("black", "Volvo");
echo $myCar -> message();

echo "<br>";

$myCar = new Car("red", "Toyota");
echo $myCar -> message();
?> 

Αποτέλεσμα:

My car is a black Volvo!
My car is a red Toyota!

NULL

Η Null είναι ένας ειδικός τύπος στον οποίο αποθηκεύεται μόνο μια τιμή, αυτή της NULL. Ο τύπος αυτής της μεταβλητής δεν περιέχει καμία τιμή και χρησιμοποιείται σε περιπτώσεις που θέλουμε να δημιουργήσουμε μια μεταβλητή χωρίς να δώσουμε τη δεδομένη στιγμή κάποια τιμή. Στην PHP, εαν δημιουργήσουμε μια μεταβλητή χωρίς τιμή, τότε αυτόματα παίρνει την τιμή NULL. Με την NULL επίσης μπορούμε να αδειάσουμε τις μεταβλητές μας σε περίπτωση που κατέχουν κάποια τιμή όπως στο παρακάτω παράδειγμα:

Παράδειγμα:

<?php
$x = "Hello world!";
$x = null;

var_dump($x);
?> 

Αποτέλεσμα:

NULL

fgets(STDIN)

PHP χρησιμοποιεί fgets για να διαβάζει γραμμές κειμένου από την τυπική είσοδο (stdin) και να τις εμφανίζει:

<?php

echo "Enter text (press Enter after each line, type 'exit' to quit):\n";

while ($line = fgets(STDIN))
{
    // Trim any leading or trailing whitespace
    $line = trim($line);

    if ($line === 'exit')
    {
        echo "Exiting the program.\n";
        break;
    }

    echo "You entered: $line\n";
}

Σε αυτό το παράδειγμα:

  1. Το σενάριο χρησιμοποιεί έναν βρόχο while για να διαβάζει συνεχώς γραμμές από την είσοδο (stdin) χρησιμοποιώντας fgets.
  2. Κόβει τη γραμμή εισόδου (trim) για να αφαιρέσει τυχόν κενό διάστημα που βρίσκεται στην αρχή ή στο τέλος του string.
  3. Εάν η γραμμή εισόδου είναι “exit”, το πρόγραμμα κλείνει. Διαφορετικά, εμφανίζει το μήνυμα που έγραψε ο χρήστης.

Μπορείτε να εκτελέσετε αυτό το σενάριο στο περιβάλλον της γραμμής εντολών (οχι μέσω web server). Πληκτρολογήστε ένα μήνυμα και πατήστε Enter μετά από κάθε γραμμή. Για να βγείτε από το πρόγραμμα, απλά πληκτρολογήστε “exit” και πατήστε Enter.