Я только начал (прямо сейчас), чтобы попытаться изучить ООП PHP, и я не могу поверить, что я уже застрял!
Я не могу найти много уроков с легким пониманием (я с одним из killerphp для начинающих, но я думаю, что мне может понадобиться более низкий уровень …), дело в том …
Учебник сказал мне создать 2 файла; index.php и class_lib.php:
<?php
class Person { //we define a class adding class before the name of the class
//Properties of the person class
var $name;
}
<!DOCTYPE html>
<html>
<head>
<title>Learning OOP PHP</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php include ("class_lib.php"); ?>
</head>
<body>
<?php
$stefan = new Person();
$stefan->set_name("Stefan Grey");
echo "Stefan's full name is: " . $stefan->get_name();
?>
</body>
</html>
Кто-нибудь может объяснить мне, почему он не выводит «Полное имя Стефана: Стефан Грей»? На самом деле ничего не отображается: /
И если кто-то знает учебник по ООП для действительно чайников (мне нужны базовые объяснения и легко, мое понимание ужасно, и мне всегда нужно прочитать все тысячу раз, прежде чем я пойму, что они значат).
Спасибо!!
Как @Mr. Инопланетянин, упомянутый ранее, у вас нет добытчик а также сеттер методы в вашем классе.
class_lib.php
<?php
class Person { //we define a class adding class before the name of the class
//Properties of the person class
var $name;
function set_name($new_name)
{
$this->gt_name = $new_name;
}
function get_name()
{
return $this->gt_name;
}
}
?>
index.php
<!DOCTYPE html>
<html>
<head>
<title>Learning OOP PHP</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php include ("class_lib.php"); ?>
</head>
<body>
<?php
$stefan = new Person();
$stefan->set_name("Stefan Grey");
echo "Stefan's full name is: " . $stefan->get_name();
?>
</body>
</html>
<?php
//initializing your class
$stefan = new Person();
//accessing "public function set_name($name)" in class
$stefan->set_name("Stefan Grey");
//accessing "public function get_name()" in class
echo "Stefan's full name is: " . $stefan->get_name();
?>
вы получаете доступ к функциям, которые не определены в вашем классе — возможно, вам следует попробовать добавить эти функции в ваш класс — возможно, так:
<?php
class Person {
//we define a class adding class before the name of the class
//Properties of the person class
private $name = "";
//this is a "setter-function", for setting values, that are not accessible from outside - so you have control over what is set
public function set_name ($name)
{
if ($name != "Captain Jack Sparrow") {
$this->name = $name;
}
}
//this is a "getter-function", for getting values from non-public vars - you can also do manipulation here
public function get_name ()
{
if ($this->name != "") { //if $this->name is not "" (Empty String),
return $this->name; //return $this->name to your ->get_name() position
} else { //else (if $this->name is "" (Empty String)
return "Nemo"; //return a standard-value
}
}
}
это концепция класса «инкапсуляция», которую вы ищете.
У php есть отличная документация на многих языках — может быть, вы немного посидите здесь:
http://php.net/manual/en/language.oop5.php